【问题标题】:JavaScript forEach: mutate elementsJavaScript forEach:改变元素
【发布时间】:2021-11-25 11:12:33
【问题描述】:

我想在数组上使用 forEach。由于 forEach 是一个 mutator,它应该改变原始数组中的值,但事实并非如此。这里有什么问题?

let array = [1, 2, 3, 4]; //simple array declaration

array.forEach((ele) => ele * 2); //using forEach to double each element in "array"

console.log(array); //logs [1,2,3,4] instead of [1,4,6,8]

这是怎么回事?

【问题讨论】:

  • 是什么让您认为forEach() 是一个突变体?
  • array.forEach((ele, i) => (array[i] *= 2));
  • 我想你在找map
  • @Reyno 也许,但map() 也不会改变输入数组。
  • 是的,您是正确的,应该指定。但是map 将有助于 OP 的用例。

标签: javascript arrays loops foreach


【解决方案1】:

Array#forEach 回调具有第二个和第三个可选参数,您可以使用它们来访问和改变每个元素:

索引 [可选]: 数组中元素的索引。

数组[可选]: 调用了数组 forEach()。

const array = [1, 2, 3, 4];

array.forEach((_, index, arr) => arr[index] *= 2);

console.log(array);

【讨论】:

  • 第二个例子是提供一个this 值,但是传递给回调的第三个参数将是它被调用的数组,这是一种比分配this 更直接的访问数组的方法. array.forEach(function(ele, index, arr) { arr[index] *= 2 });
【解决方案2】:

不,forEach 不会改变原始数组。

您可以通过提供第二个参数index,然后更新原始数组的值来实现您要查找的内容。

let array = [1, 2, 3, 4];
array.forEach((ele, index) => array[index] = ele * 2);

console.log(array);

forEach 的文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2016-06-07
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2016-11-25
    相关资源
    最近更新 更多