从数组中拼接值并将拼接值推入另一个数组

时间:2018-03-30 20:33:02

标签: javascript arrays push splice

您好,这是我的问题。我有一个任务,我需要从数组中删除元素并将它们推入另一个数组,然后返回带有已删除元素的数组。例如,在这种情况下,我必须删除所有0值,并将它们推入'a'数组,然后返回'a'数组,其中有0值。我通过使用splice方法和循环从数组中删除了0个值,但我不知道如何将删除的elemts推入'a'数组,我尝试使用push方法,但我不适合我。希望你能帮助我。谢谢大家。

function moveZeros(array) {
  var a = [];
  for (var i = array.length - 1; i--;) {
    if (array[i] == "0") {
      array.splice(i, 1);
    }

  }
  
  return a;
}

moveZeros([1, 2, 0, 1, 0, 1, 0, 3, 0, 1]);

3 个答案:

答案 0 :(得分:2)

使用push应该有效。 .splice方法将返回包含已删除元素的数组,您可以使用扩展运算符...将其作为一组参数传递给push



function moveZeros(array) {
  var a = [];
  for (var i = array.length - 1; i >= 0; i--) {
    if (array[i] == "0") {
      a.push(...array.splice(i, 1));
    }

  }
  
  return a;
}
  
const array = [0, 1, 2, 0, 1, 0, 1, 0, 3, 0, 1, 0, 0];
console.log(moveZeros(array));
console.log(array)




最后,您应该将i--作为循环的最后一部分,以便它只在每次迭代完成时执行(而不是在它们开始时)。然后,将您的条件更改为i >= 0,这样您就不会错过阵列前面的零点。

答案 1 :(得分:2)

Array.splice()会返回已删除元素的数组,您可以使用Array.concat()将它们添加到a数组。

备注:

  1. 初始iarray.length没有-1,因为条件i-- 在执行循环体之前检查。
  2. 由于数组从头到尾迭代,因此将a连接到已删除的 维持原始秩序的要素。
  3. 
    
    function moveZeros(array) {
      var a = [];
      for (var i = array.length; i--;) {
        if (array[i] === 0) {
          a = array.splice(i, 1).concat(a);
        }
    
      }
      
      return a;
    }
    
    var result = moveZeros([1, 2, 0, 1, 0, 1, 0, 3, 0, 1, 0]); // I've added a last 0 to the array to show that all items were removed
    console.log(result);
    
    
    

答案 2 :(得分:1)

如果需要,您可以从末尾迭代并拼接数组。此解决方案会改变array

function moveZeros(array) {
    var i = array.length,
        a = [];

    while (i--) {
        if (array[i] === 0) {
            a.push(array.splice(i, 1)[0]);
        }
    }
    return a;
}

var array = [1, 2, 0, 1, 0, 1, 0, 3, 0, 1];

console.log(moveZeros(array));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }