每个JS数组的问题

时间:2017-12-09 13:49:38

标签: javascript foreach

这是我的代码JS:

var items = [255, 255, 255, 255];
items.forEach(function(item) {
    if (item = 255) {
        item = 0;
    };
});
console.log(items)

在console.log中,我得到[255, 255, 255, 255],为什么它不会更改为[0, 0, 0, 0]?我做错了什么?

4 个答案:

答案 0 :(得分:1)

您想使用.map

.forEach没有返回任何内容,它用于为每个项目运行一个函数。 .map为其运行的每次迭代返回一个值。

var items = [255, 255, 255, 255]
items = items.map(item => item === 255 ? 0 : item)

console.log(items) // [0, 0, 0, 0]

答案 1 :(得分:1)

好吧,您只是更改了值类型参数,数组中的项不会发生任何变化。您只需将其更改为使用map代替并创建新数组

items = items.map( item => item === 255 ? 0 : item );

正如评论中所述,在原始代码中,您还使用了赋值运算符而不是比较运算符

当你这样做时:

if (item = 255) 

您将为项目分配255(这将是真实的,然后进入您使用0分配的if语句)

答案 2 :(得分:1)

您的代码包含两个错误。

  1. =是作业,而不是比较。您的功能相当于:

    function (item) {
        item = 255;
        item = 0;
    }
    
  2. item是一个函数参数,即匿名函数中的局部变量。分配给itemitems数组没有影响:

    var x = 255;
    (function (y) { y = 0; })(x);
    console.log(x);
    // 255
    

答案 3 :(得分:0)

您可以使用对数组的引用来更改Array#forEach的回调内的值。

顺便说一句,在block statement之后,有no need for a semicolon



var items = [255, 255, 255, 255];

items.forEach(function(item, index, array) {
//                                  ^^^^^
    if (item = 255) {
        array[index] = 0;
    }
//   ^ no semicolon needed
});

console.log(items);