【问题标题】:Global array object vs foreach() array object全局数组对象 vs foreach() 数组对象
【发布时间】:2023-03-10 00:45:02
【问题描述】:

以下代码中的globalArrayforeachArray 对象有什么区别?以及在哪种情况下我们需要使用foreachArray 对象而不是globalArray

var globalArray= ['Apple', 'Banana'];


globalArray.forEach(function(item, index, foreachArray) {
  console.log(foreachArray);// result is ['Apple', 'Banana'];
  console.log(globalArray);// result is ['Apple', 'Banana'];
});

【问题讨论】:

  • 传入forEach() 的最后一个参数是正在迭代的数组本身。如果您想遵循纯函数方法而不依赖“外部”(可通过​​闭包访问)变量,这将非常有用。
  • 我认为它们是同一个引用。
  • @haim770 你说的follow a pure-function approach是什么意思??
  • @RameshRajendran ['Apple', 'Banana'].forEach

标签: javascript arrays foreach ecmascript-6


【解决方案1】:

它们是相同的(它们引用相同的对象)。根据docs

array(在您的情况下为 foreachArray) 是 forEach() 正在应用于的数组。

这是forEach的签名:

someArray.forEach(function callback(currentValue[, index[, array]])   

地点:

currentValue:数组中正在处理的当前元素的值。

index(Optional):当前正在处理的元素在数组中的索引。

array(Optional): 正在应用 forEach() 的数组。

在你这里 someArrayarray 将是相同的,就像在你的情况下 globalArrayforeachArray 是相同的。

因此,如果您需要引用调用 forEach 的数组,请使用 foreachArray,因为它是 JavaScript 提供的语言功能。

【讨论】:

  • 伙计们我也问过which scenario we need to use?
【解决方案2】:

forEach 函数接受 3 个 Parameters

currentValue 数组中正在处理的当前元素的值。
index可选)数组中正在处理的当前元素的索引。
@ 987654325@ (可选) forEach() 被应用到的数组。

您的问题是最后一个参数如何连接到被迭代的数组,以及您为什么想要这个。

参数其实是对原数组的引用

let arrayVar = [0];

arrayVar.forEach((currentValue, index, array) => {
  console.log(arrayVar === array)
})

但这为什么有用?这三个主要原因是:

  • 引用不带变量的数组
  • 将数组传递给外部函数
  • 保持代码整洁简洁

引用一个未保存为变量的数组,如果该数组只使用一次,它可能会派上用场。

[1,2,3,4].forEach((value,index,array)=>{
  console.log(array);
})

将您的 forEach 传递给外部函数当您想在多个数组上使用相同的函数时,这会非常有用。

function extFunct(value, index, array) {
  console.log(array)
}

let array = [1, 2, 3, 4];
let array2 = [5, 6, 7, 8];

array.forEach(extFunct);
array2.forEach(extFunct);

保持代码整洁和简洁您可以在不使用长而清晰的数组名称的情况下引用您的数组。

let someLongDescriptiveArrayName = [1,2,3,4];

someLongDescriptiveArrayName.forEach((v,i,a)=>{
  console.log(a)
})

我希望一切都说得通,如果没有任何问题,请随时提出。

【讨论】:

    【解决方案3】:

    它们是具有相同引用的 2 个变量,仅更改了变量名称。见下文,如果我在 foreachArray 中推送一个项目,它也会在 globalArray 中添加相同的内容。

    var globalArray= ['Apple', 'Banana'];
    
    
    globalArray.forEach(function(item, index, foreachArray) {
      foreachArray.push('Orange');
      console.log(foreachArray);// result is ['Apple', 'Banana', 'Orange'];
      console.log(globalArray);// result is ['Apple', 'Banana', 'Orange'];
    });

    在此处查看何时应该使用的场景:Why provide an array argument in Javascript's array.forEach callback?

    【讨论】:

    • 伙计们我也问过which scenario we need to use?
    【解决方案4】:

    globalArrayforeachArray 对象相同。

    您将foreachArray 作为第三个参数传递。

    第三个参数array:forEach() 被应用到的数组。

    它也指向相同的参考。

    var globalArray= ['Apple', 'Banana'];
    
    
    globalArray.forEach(function(item, index, foreachArray) {
      foreachArray.push("Cherry");
      console.log("foreachArray: ", foreachArray);// result is ['Apple', 'Banana'];
      console.log("globalArray..", globalArray);// result is ['Apple', 'Banana'];
    });

    【讨论】:

    • 伙计们我也问过which scenario we need to use?
    • 这两个对象没有区别。因此,您可以使用其中任何一个。但我更喜欢根据文档使用foreachArray
    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多