例子:

var arr = ["one","two","three"];

arr.forEach(function(part){
  part = "four";
  return "four";
})

alert(arr);

数组仍然是它的原始值,有任何方法来写访问数组的元素从迭代函数?


当前回答

下面是使用=>样式函数的类似答案:

var data = [1,2,3,4];
data.forEach( (item, i, self) => self[i] = item + 10 );

给出结果:

[11,12,13,14]

self参数对于箭头样式函数并不是严格必要的,所以

data.forEach( (item,i) => data[i] = item + 10);

同样适用。

其他回答

如果您想删除项目

如果您需要做的更改是完全从列表中删除一个或多个项目,那么使用for循环并向后执行循环会更安全。

    for (let i = myArray.length - 1; i >= 0; i--)
    {
        const item = myArray[i];

        if (...) 
        {
           // remove item
           // https://stackoverflow.com/questions/5767325/how-can-i-remove-a-specific-item-from-an-array?rq=1
        }
    };

向后意味着每个项的数组永远不会改变。如果你继续循环并删除项目[3],那么项目[4]现在是新的项目[3],这不会让任何事情变得更容易。你不会让这个问题倒退。

这当然是一个不使用foreach的解决方案,但重要的是要记住,“老派”的方法往往是最好的。如果出于某种原因你需要分手;在循环中(有很多项),for循环更有效,因为不能跳出for循环。

如果你想重写,你可以试试这个

var newArray= [444,555,666];
var oldArray =[11,22,33];
oldArray.forEach((name, index) => oldArray [index] = newArray[index]);
console.log(newArray);

下面是使用=>样式函数的类似答案:

var data = [1,2,3,4];
data.forEach( (item, i, self) => self[i] = item + 10 );

给出结果:

[11,12,13,14]

self参数对于箭头样式函数并不是严格必要的,所以

data.forEach( (item,i) => data[i] = item + 10);

同样适用。

要完全添加或删除会改变索引的元素,可以通过扩展zhujy_8833的slice()建议迭代一个副本,只需计算已经删除或添加的元素的数量,并相应地更改索引。例如,要删除元素:

let values = ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8"];
let count = 0;
values.slice().forEach((value, index) => {
    if (value === "A2" || value === "A5") {
        values.splice(index - count++, 1);
    };
});
console.log(values);

// Expected: [ 'A0', 'A1', 'A3', 'A4', 'A6', 'A7', 'A8' ]

在前面插入元素:

if (value === "A0" || value === "A6" || value === "A8") {
    values.splice(index - count--, 0, 'newVal');
};

// Expected: ['newVal', A0, 'A1', 'A2', 'A3', 'A4', 'A5', 'newVal', 'A6', 'A7', 'newVal', 'A8' ]

在后面插入元素:

if (value === "A0" || value === "A6" || value === "A8") {
    values.splice(index - --count, 0, 'newVal');
};

// Expected: ['A0', 'newVal', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'newVal', 'A7', 'A8', 'newVal']

替换一个元素:

if (value === "A3" || value === "A4" || value === "A7") {
    values.splice(index, 1, 'newVal');
};

// Expected: [ 'A0', 'A1', 'A2', 'newVal', 'newVal', 'A5', 'A6', 'newVal', 'A8' ]

注意:如果同时实现'before'和'after'插入,代码应该先处理'before'插入,否则就不会像预期的那样

数组:[1,2,3,4] 结果:["foo1", "foo2", "foo3", "foo4"]

保持原始数组

const originalArr = ["Iron", "Super", "Ant", "Aqua"]; const modifiedArr = originalArr。Map (name => ' ${name}man '); console.log("Original: %s", originalArr); console.log("Modified: %s", modifiedArr);

覆盖原始数组

let originalArr =["铁","超级","蚂蚁","水"]; originalArr = originalArr。Map (name => ' ${name}man '); console.log("Original: %s", originalArr);

重写原始数组

const originalArr = ["Iron", "Super", "Ant", "Aqua"]; originalArr。forEach((name, index) => originalArr[index] = ' ${name}man '); console.log("被覆盖:%s", originalArr);