推送后Javascript排序不起作用?

Dea*_*ean 6 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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

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.
Run Code Online (Sandbox Code Playgroud)

Her*_*aaf 10

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

array.push(1, 5, 10);
Run Code Online (Sandbox Code Playgroud)

最终输出将是:

Sort 2: 1,2,4,5,6,8,10 
Run Code Online (Sandbox Code Playgroud)

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

[2,4,6,8,[1,5,10]]
Run Code Online (Sandbox Code Playgroud)

虽然你做的时候没有清楚地表现出来console.log.

编辑:正如乔纳森所提到的,如果你想要追加一系列物品,那.concat()就是要走的路.


Jon*_*ski 6

.push()没有结合Array如下似乎期望:

array.push([1, 5, 10]);
Run Code Online (Sandbox Code Playgroud)

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

[ 2, 4, 6, 8, [ 1, 5, 10 ] ]
Run Code Online (Sandbox Code Playgroud)

要将一个附加Array到另一个上,您可以使用.concat():

array = array.concat([1, 5, 10]);
Run Code Online (Sandbox Code Playgroud)