全局数组对象与foreach()数组对象

时间:2018-07-26 11:06:18

标签: javascript arrays foreach ecmascript-6

以下这段代码中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'];
});

4 个答案:

答案 0 :(得分:4)

forEach函数接受3个Parameters

  

currentValue数组中正在处理的当前元素的值。
  index可选)数组中正在处理的当前元素的索引。
  array可选)要应用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)
})

我希望一切都有意义,即使不是随意问任何问题。

答案 1 :(得分: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?

答案 2 :(得分:2)

它们是相同的(它们引用相同的对象)。根据{{​​3}}:

  

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

这是forEach的签名:

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

位置:

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

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

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

在您这里的someArrayarray相同,就像您的情况globalArrayforeachArray一样。

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

答案 3 :(得分:1)

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'];
});