这是我的代码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]
?我做错了什么?
答案 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)
您的代码包含两个错误。
=
是作业,而不是比较。您的功能相当于:
function (item) {
item = 255;
item = 0;
}
item
是一个函数参数,即匿名函数中的局部变量。分配给item
对items
数组没有影响:
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);