使用 ForEach() 正确访问内部数组值 - JavaScript

快乐之手31

我有

b = [1, 2, 3, [4, 5], 6];

b.forEach((value, index) => {
    if (Array.isArray(value)) {
        value.forEach(element => element += 2)
    }
    else {
        value += 2;
    }
    console.log(`The value at ${index} is ${value}`);
})

我想知道为什么这是记录

3 处的值为 4,5

代替

3 处的值为 6, 7

我以为我通过检查值是否是数组.forEach来访问内部数组,然后我做了另一个循环来访问该内部数组的每个元素?

试图完全理解.forEach()JS。谢谢!

TJ克劳德

有两个原因:

  1. forEach 完全忽略您从其回调返回的值

  2. 你从不做任何更新 value

如果你想修改value,你要么这样做:

value = value.map(element => element + 2);

...创建一个数组并将其分配给value; 请注意,这b完全不受影响。(这就像你value += 2在另一个分支中一样,它也完全不影响b。)实例:

const b = [1, 2, 3, [4, 5], 6];

b.forEach((value, index) => {
    if (Array.isArray(value)) {
        value = value.map(element => element + 2);
    }
    else {
        value += 2;
    }
    console.log(`The value at ${index} is ${value}`);
})
// Just to show that `b` is unaffected:
console.log(`b[3] = ${b[3]}`);

或这个:

value.forEach((element, index) => {
    value[index] = element + 2;
});

...它改变了原始数组(内部b),它分支(不更新匹配现场示例:elseb

const b = [1, 2, 3, [4, 5], 6];

b.forEach((value, index) => {
    if (Array.isArray(value)) {
        value.forEach((element, index) => {
            value[index] = element + 2;
        });
    }
    else {
        value += 2;
    }
    console.log(`The value at ${index} is ${value}`);
})
// Just to show that `b` is modified:
console.log(`b[3] = ${b[3]}`);

但是,如果您想修改b,您可能应该始终如一地进行。Kobe 发布了你如何使用map,它会创建一个新数组并且通常是你想要的。如果您想更新现有数组,则:

const b = [1, 2, 3, [4, 5], 6];
for (const [bIndex, value] of b.entries()) {
    if (Array.isArray(value)) {
        for (const [vIndex, entry] of value.entries()) {
            value[vIndex] = entry + 2;
        }
    } else {
        b[bIndex] = value + 2;
    }
}
console.log(`b = ${JSON.stringify(b)}`);

……但科比的map解决方案通常是我所能达到的,除非我有充分的理由进行适当的更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ForEach 内部的 Foreach Javascript

JavaScript:使用forEach查看数组是否包含特定的数字值

使用 JavaScript 在 ForEach 循环中拆分数组值?

javascript使用forEach嵌套数组

使用foreach从数组中删除项目-JavaScript

使用 forEach 检查 JavaScript 数组相等性

使用Javascript中的foreach实现数组

在PHP Codeigniter内部的JavaScript中使用foreach获取列表

如何使用 javaScript 从 JSTL ForEach 标记访问特定元素?

如何使用javascript和jade中的foreach循环访问对象的json数组

javascript:如何使用forEach访问数组中的下一个索引?

我如何在 javascript 中为 Json 数组使用 forEach

Javascript 的 forEach() 方法使用未定义的键创建数组

没有数组时如何使用forEach [JavaScript]

Javascript 如何在 filter() 中使用 forEach() 过滤数组

如何使用JavaScript .forEach迭代JSON对象和JSON数组

JavaScript:使用 .forEach 向数组项添加新属性

在多维数组上使用javascript forEach和splice

如何使用javascript在foreach中实时显示数组输入的总数

如何使用 forEach 遍历 Javascript 数组对象以创建元素?

Javascript:一次在多个数组上使用 foreach

Javascript forEach 使用函數修改數值數組

如何使用javascript在foreach循环中获取TD的值?

在foreach循环中使用PHP更改外部Javascript的值

javascript在forEach中使用return

JavaScript foreach遍历十六进制值数组,使用setTimeout遍历背景色

使用另一个数组中的值修改javascript forEach结果

JavaScript:使用multer访问对象内部数组中的对象

如何正确使用foreach()