2017-09-22 17 views
0

我想在通过Array中的条件移除元素的同时提取某些元素。 我的代码是非常丑陋,我不知道这将是更好的办法了可读性和性能在javascript数组中提取并移除具有两个条件的元素

前) 有阵列状

a =[1,2,3,4,3,2,2,2,1] 

我想提取元素,它刨丝器比2(元素> 2)。然后,我将它推到新的阵列中,直至newArray的长度为2

,我需要最后IDX这newArray 结果回路断线点之后元素的索引将

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

对于更易读的代码,我们可以应用功能样式。

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); 
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

更多更快的变种
相关问题