推送后Javascript排序不起作用?

时间:2014-01-30 14:54:15

标签: javascript sorting

我在这里做错了什么:IE9和FF中的结果相同。

function TestArrayOperationsClick()
{
  function sortNums(a, b)
  {
    return a - b;
  }
  var array = [6, 4, 2, 8];
  console.log("Array 1: " + array); 
  array.sort(sortNums);
  console.log("Sort 1: " + array);
  array.push([1, 5, 10]);
  console.log("Array 2: " + array);
  array.sort(sortNums);
  console.log("Sort 2: " + array);
}

输出:

LOG: Array 1: 6,4,2,8 

LOG: Sort 1: 2,4,6,8 

LOG: Array 2: 2,4,6,8,1,5,10 

LOG: Sort 2: 2,4,6,8,1,5,10 <- not sorted.

3 个答案:

答案 0 :(得分:10)

对于array.push(...),您应该传递单个参数,而不是数组:

array.push(1, 5, 10);

最终输出将是:

Sort 2: 1,2,4,5,6,8,10 

否则,推送的结果实际上就是这样:

[2,4,6,8,[1,5,10]]

,虽然在console.log时没有清楚显示。

修改:正如Jonathan所提到的,如果您想要附加一系列项目,.concat()就可以了。

答案 1 :(得分:6)

.push()未合并Array,如下所示:

array.push([1, 5, 10]);

不是推送单个值,而是推送第二个Array本身,导致:

[ 2, 4, 6, 8, [ 1, 5, 10 ] ]

要将一个Array附加到另一个array = array.concat([1, 5, 10]); ,您可以使用.concat()

{{1}}

答案 2 :(得分:1)

如上所述,对于array.push,您应该传递单独的参数,例如:

array.push(1, 5, 10);

但是您可以执行以下操作将数组的内容添加到另一个数组中:

Array.prototype.push.apply(array, [1, 5, 10]);

这样,您可以将数组作为参数传递,因为apply()函数将第二个参数(必须是数组)转换为单个参数;)