推后删除元素

如果我有一个数组,将某些元素推送到第二个数组,那么我怎样才能从第一个数组中将这些元素推到第二个数组后? 这里是示例代码:

for(var a = 0; a < arr.length; a+=1){ if(arr[a].length == 4){ other.push(arr[a]); } } 

换句话说,我知道如果元素被推到另一个元素上的话,元素arr [a]会更长。

只要在原始数组索引上进行拼接,即可删除该元素,如果不再需要的话。

 for(var a = 0; a < arr.length;){ if(arr[a].length == 4){ other.push(arr[a]); arr.splice(a, 1); } else { a += 1; } } 

这看起来很好:

 for(var a = 0, length=arr.length; a < length; a++){ if(arr[a].length == 4){ other.push(arr[a]); arr.splice(a,1); } } 

编写一个函数,它接受一个input数组,以及一个函数来确定一个元素是否应该移动。 它返回一个包含修改过的input的两元素数组,以及已经提取元素的新数组。

 function extractIf(array, condition) { return [ array.filter(not(condition)), array.filter( condition) ]; } // Specify which elements are to be extracted/moved. function condition(elt) { return elt.length === 4; } // Little helper function to invert a function. function not(fn) { return function() { return !fn.apply(this, arguments); }; } 

调用它为:

 var results = extractIf(arr, condition); arr = results[0]; other = results[1]; 

下划线解决scheme

如果您愿意使用下划线,则可以通过条件的真/假值对input进行分组:

 var groups = _.groupBy(arr, function(elt) { return elt.length === 4; }) 

删除元素的原始数组将在groups.falseother数组在groups.true