推后删除元素
如果我有一个数组,将某些元素推送到第二个数组,那么我怎样才能从第一个数组中将这些元素推到第二个数组后? 这里是示例代码:
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.false
, other
数组在groups.true
。