What's wrong with my forEach method when a simple For Loop works just fine

And*_*rev 6 javascript foreach dictionary cycle

因此,给定数组,我有一个简单的任务:let arr = [true,false,true,false,true]; 我需要将真假改为假,反之亦然。我已经通过for循环做到了这一点:它工作正常。

现在,我正在尝试对forEach进行同样的操作,但我不知道为什么这行不通。所以,这是我的代码:

for (let i = 0; i < arr.length; i++) {
    if (arr[i] === true) arr[i] = false;
    else arr[i] = true;
} // it works

// for some reason, this doesn't
arr2.forEach(el => el === true ? el = false : el = true);
console.log(arr)

//Neither this: 
arr.forEach(el => el === true && el = false || el === false && el = true);
console.log(arr)
Run Code Online (Sandbox Code Playgroud)

该地图也不起作用:有人可以指出我的错误并解释我做错了什么吗?也许显示其他解决方法?使用过滤器,减少还是更可取?单线解决方案是高度首选的。谢谢您的回答!

MrG*_*eek 3

您需要的是Array.prototype.map,因为分配el与分配不同arr[i](它不会改变数组):

arr2 = arr2.map(el => el === true ? false : true);
Run Code Online (Sandbox Code Playgroud)

可以简化为:

arr2 = arr2.map(el => !el);
Run Code Online (Sandbox Code Playgroud)