2014-01-30 25 views
5

我在做什么错在这里:在IE9和FF中的结果相同。推动后JavaScript排序不起作用?

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. 

回答

10

对于array.push(...),你应该传递个别参数,不是数组:

array.push(1, 5, 10); 

的量,最终输出将被:

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

Ot herwise,你推的结果居然是这样的:

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

,虽然它没有显示当你做console.log清楚。

编辑:正如乔纳森提到的,如果你想追加一个项目的数组,.concat()是要走的路。

+0

谢谢赫尔曼和所有其他人指出了这一点。我的错。 – Dean

6

.push()不结合Array就像下面似乎期待:

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

而是推动个人价值的,它推动第二Array本身,造成:

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

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

array = array.concat([1, 5, 10]); 
+0

数组返回一个新数组。如果你想修改现有的数组,通过推动另一个数组的所有元素,你可以这样做:array.push.apply(array,[1,5,10]) – lrn

+0

@ln是的,如果你坚持使用一个增变器,你可以使用'.push.apply()'。 ES6的[spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)也将简化它:'array.push(... [1,5, 10])'。 –

1

如前所述,为array.push你应该通过单独的参数作为例如:

array.push(1, 5, 10); 

但是你可以做以下到一个数组的内容添加到另一个数组:

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

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