【发布时间】:2019-08-10 09:09:53
【问题描述】:
我有一个数组: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 函数的实际作用,但就是想不出任何合乎逻辑的东西。
【问题讨论】:
-
如果在
contains()或indexOf()上并基于此,将其推入数组或拼接出来,为什么不呢? -
它有效 ...所以 [1, 1, 5, 1, 1] 应该导致 [1, 1] ?
-
@JonasWilms 是的,我没看到那个来了,谢谢
-
Jeto 的回答应该可以解决这个问题。没有真正的理由为此使用
reduce,因为它只会使事情复杂化。如果您只是过滤掉现有的5s,reduce将是filter的一个过于复杂但并非不合理的替代方案。但是由于您还想添加5(如果它不存在),因此您的累加器将需要携带额外的状态——否则您会将其存储在更糟糕的地方。这样的代码是可行的,但与替代方案相比相当难看。
标签: javascript