我想在Array中按条件删除元素时提取一些元素。 我的代码非常丑陋,我不知道哪种更好的可读性和性能方式
离) 有像
这样的数组a =[1,2,3,4,3,2,2,2,1]
我想要比2更重的提取元素(元素> 2)。然后我将它推入新数组,直到newArray的长度为2。
我需要在newArray中循环断点之后的元素索引的最后一个idx 结果将是
a = [1,2,2,2,2,1]
newArray = [3,4] (I want to keep order)
idx = 2
这是我的代码。但非常难看。
for (let i = 0; i < leng; i++) {
if (array[i]> cond) {
newArray.push(array[i])
array.splice(i, 1)
i -= 1
leng -= 1
if (newArray.length === cond) {
idx = i;
break;
}
}
}
答案 0 :(得分:0)
对于更易读的代码,我们可以应用函数式。
let a =[1,2,3,4,3,2,2,2,1];
let b = [];
let idx = 0;
let filterFn = function (e) { if (b.length < 2 && e > 2) { b.push(e); ++idx; } return e <= 2; }
a.filter(filterFn);
答案 1 :(得分:0)
我想为您提供更快速的代码变体
let arr = [1, 2, 3, 4, 3, 2, 2, 2, 1];
let newArr = [];
let max = arr.length;
let idx = 0;
let cond = 2;
let maxValue = 2;
while (cond && idx < max) {
let value = arr[idx];
if (value > maxValue) {
newArr.push(value);
arr.splice(idx, 1);
cond--;
continue;
}
idx++;
}
console.log(arr); // [1, 2, 3, 2, 2, 2, 1]
console.log(newArr); // [3, 4]
console.log(idx); // 2
&#13;