在javascript数组中用两个条件提取和删除元素

时间:2017-09-22 03:13:53

标签: javascript arrays

我想在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;
    }
  }
}

2 个答案:

答案 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)

我想为您提供更快速的代码变体

&#13;
&#13;
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;
&#13;
&#13;