推送后删除元素

时间:2015-04-17 04:14:03

标签: javascript arrays node.js

如果我有一个数组,我将某些元素推送到第二个数组 - 如何在将它们推到第二个数组后从第一个数组中删除这些元素?以下是示例代码:

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

      }       
}

换句话说,我知道如果将元素arr [a]推到另一个元素中,则需要更长时间。

3 个答案:

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

相关问题