我在这里做错了什么: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.
答案 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()
函数将第二个参数(必须是数组)转换为单个参数;)