我想我正在错误地使用拼接方法

时间:2017-06-15 02:09:36

标签: javascript arrays splice

我正在尝试解决问题,但我很难从拼接方法中获得答案。我试图从数组中取出所有奇数,将它们按顺序排列,然后将它们放回数组中,同时保留偶数。在我的最后一个for循环中,我试图使用splice来获取当前奇数的索引,将其删除,并通过变量将已排序的奇数放回去。它没有按照我的意图行事。感谢您提供的任何帮助。

function sortArray(array) {

  var odds = [];

  for (var i = 0; i < array.length; i++) {

    if (array[i] % 2 !== 0) {

      odds.push(array[i]);

    }

  }

  odds.sort();

  console.log('array', array)

  for (var j = 0; j < array.length; j++) {

    var x = 0;

    if (array[i] % 2 !== 0) {

      x = odds.shift();

      console.log('x', x)

      array.splice(i, 1, x); <-- I think this is my problem...maybe...

      console.log('array 2', array)

    }

  }

  console.log(array)

  return array;

}


sortArray([5, 3, 2, 8, 1, 4])

这些是我从中得到的控制台日志:

array [ 5, 3, 2, 8, 1, 4 ]

x 1

array 2 [ 5, 3, 2, 8, 1, 4, 1 ]

x 3

array 2 [ 5, 3, 2, 8, 1, 4, 3 ]

x 5

array 2 [ 5, 3, 2, 8, 1, 4, 5 ]

x undefined

array 2 [ 5, 3, 2, 8, 1, 4, undefined ]

x undefined

array 2 [ 5, 3, 2, 8, 1, 4, undefined ]

x undefined

array 2 [ 5, 3, 2, 8, 1, 4, undefined ]

x undefined

array 2 [ 5, 3, 2, 8, 1, 4, undefined ]

[ 5, 3, 2, 8, 1, 4, undefined ]

=> [ 5, 3, 2, 8, 1, 4, undefined ]

1 个答案:

答案 0 :(得分:0)

splice期待两个参数

  1. 您要开始删除的元素的索引。
  2. 要删除的项目数。
  3. 所以在你的代码中。 第1步:创建奇数数组 第2步:对它进行排序 步骤3:从现有阵列中删除奇数 步骤4:将奇数奇数组连接到现有数组的末尾。

    Step-1&amp; 2很好

    步骤-3&amp; 4

    for (var j = 0; j < array.length; j++) {
    
      var x = 0;
    
      if (array[j] % 2 !== 0) {
    
         array.splice(j, 1); 
      }
    }
     array = array.concat(odds);