javascript - 如何使用 reduce 函数来简化这段代码

标签 javascript

我有一个数组:var old_array = [1, 2, 3, 4, 5]

如果此数组中存在 5,则将其删除,否则添加。

var new_array = [];
var number_existed = false;
for(var i=0,len=old_array.length;i<len;i++) {
   if(old_array[i] == 5) {
   new_array = old_array.slice(i+1);
   number_existed = true;
   break;
   } else {
      new_array.push( old_array[i] );
   }
}

if(!number_existed) {
    new_array.push(5);
}

它有效,但我需要改进。我该如何改进这段代码。我想看看 reduce 函数的运行情况,但就是想不出任何合乎逻辑的东西。

最佳答案

您可以使用 Array.includes 检查元素是否已经存在, 然后 Array.filter它删除它,或使用 spread syntax 添加它:

function addOrRemove5(arr) {
  return arr.includes(5) ? arr.filter(v => v !== 5) : [...arr, 5];
}

console.log(addOrRemove5([1, 2, 3, 4, 5]));
console.log(addOrRemove5([1, 2, 3, 4]));

关于javascript - 如何使用 reduce 函数来简化这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55247801/

相关文章:

javascript - 仅当内容在 500 毫秒内没有更改时才执行操作

javascript - 我如何使用 JQuery 获取从表单提交的数据?

javascript - Jquery 对话框中的动态 Div 内容

javascript - 您可以向 Kendo 窗口添加模态背景吗?

javascript用全局替换所有字符串和变量

javascript - JS "smart"跨多个段落的文本 chop

javascript - Material 用户界面 : Style nested components in TablePagination

javascript - 单击复选框更改 p 文本

javascript - 当我删除并重新添加 JQuery 事件时,它们会被解除绑定(bind)

javascript - TypeScript - 如何继承类和覆盖 lambda 方法