【问题标题】:Splice value from an array and push spliced value into another array拼接一个数组中的值并将拼接后的值推入另一个数组
【发布时间】:2018-09-09 21:17:50
【问题描述】:

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

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]);

【问题讨论】:

  • 请添加想要的结果。你想找回所有的零并且array 没有零吗?
  • 根据 OP i don't realy know how to push removed elemts into 'a' array.
  • 我想从数组中删除所有零并将它们推入新数组并返回新数组。

标签: javascript arrays push splice


【解决方案1】:

使用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,这样您就不会错过数组前面的零。

【讨论】:

    【解决方案2】:

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

    注意事项:

    1. 初始化iarray.length 不带-1,因为条件i-- 在执行循环体之前进行检查。
    2. 由于数组是从头到尾迭代的,连接a到被移除的 元素以保持原始顺序。

    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);

    【讨论】:

      【解决方案3】:

      如有必要,您可以从末尾迭代并拼接数组。这个解决方案改变了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; }

      【讨论】:

        猜你喜欢
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多