在Lodash中,有 .without 用于遍历数组,删除掉指定元素。
例如:.without([1, 2, 3, 3, 3], 3) => [1, 2]
那么不使用Lodash使用JavaScript的元素方式能否实现呢?
首先,我使用了splice:
_removeArray(array, id) {
array.forEach((a,i) => {
if (a === id)
array.splice(i, 1);
});
}
_removeArray([1, 2, 3, 3, 3], 3) => [1, 2, 3]
结果发现出问题了。。
由于spalice是实时修改数组的,这就导致使用循环会跳过下一个元素而无法彻底删除掉所有指定元素。
而后,我对其进行了修改。最终效果如下:
_removeArray(array, id) {
while (true) {
let indexFlag = false;
for (let i = 0; i < array.length; i++) {
if (array[i] === id) {
indexFlag = true;
array.splice(i, 1);
break;
}
}
if (!indexFlag) break;
}
}
_removeArray([1, 2, 3, 3, 3], 3) => [1, 2]