如果我有一个数组,我将某些元素推送到第二个数组 - 如何在将它们推到第二个数组后从第一个数组中删除这些元素?以下是示例代码:
for(var a = 0; a < arr.length; a+=1){
if(arr[a].length == 4){
other.push(arr[a]);
}
}
换句话说,我知道如果将元素arr [a]推到另一个元素中,则需要更长时间。
答案 0 :(得分:1)
只需对原始数组索引进行拼接即可删除该元素(如果不再需要它)。
for(var a = 0; a < arr.length;){
if(arr[a].length == 4){
other.push(arr[a]);
arr.splice(a, 1);
}
else {
a += 1;
}
}
答案 1 :(得分:0)
这看起来很好:
for(var a = 0, length=arr.length; a < length; a++){
if(arr[a].length == 4){
other.push(arr[a]);
arr.splice(a,1);
}
}
答案 2 :(得分:0)
编写一个带有输入数组的函数,以及一个确定是否应该移动元素的函数。它返回一个包含修改后的输入的双元素数组,以及已提取元素的新数组。
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];
如果您愿意使用下划线,您可以按条件的真/假值对输入进行分组:
var groups = _.groupBy(arr, function(elt) { return elt.length === 4; })
包含已删除元素的原始数组将位于groups.false
中,而other
数组位于groups.true
。