2014-01-30 48 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()函數將第二個參數(必須是數組)轉換爲單獨的參數;)