我的代码也在this fiddle中 我列出了下面的输出和预期输出。我无法理解为什么我还没有对rNums进行排序但它仍然输出了sorterd结果?
如果我注释掉sort函数,那么随机出现我想要但没有订购。我在这里做错了什么?
随机应该在nNums中显示,有序应该按数字顺序显示吗?
<ul id="random"></ul>
<ul id="ordered"></ul>
<script>
var rNums = [1,5,3,2,4];
console.log(rNums);
var sortRNums = rNums;
sortRNums.sort(function (a, b) {
return a - b
});
$.each(rNums, function (index, value) {
$("#random").append('<li>' + value + '</li>');
});
$.each(sortRNums, function (index, value) {
$("#ordered").append('<li>' + value + '</li>');
});
console.log(sortRNums);
</script>
输出
<ul id="random">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<ul id="ordered">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
预期产出
<ul id="random">
<li>1</li>
<li>5</li>
<li>3</li>
<li>2</li>
<li>4</li>
</ul>
<ul id="ordered">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
答案 0 :(得分:5)
sort
修改了在排序之前创建副本所需的原始数组。
var sortRNums = rNums.slice(0);
答案 1 :(得分:2)
这是因为变量sortNums指向相同的内存位置 JsFiddle
var rNums = [1,5,3,2,4];
var rUnsortedNums = $.map(rNums, function(i){return i;});
console.log(rNums);
var sortRNums = rNums;
sortRNums.sort(function (a, b) {
return a - b
});
$.each(rUnsortedNums, function (index, value) {
$("#random").append('<li>' + value + '</li>');
});
$.each(sortRNums, function (index, value) {
$("#ordered").append('<li>' + value + '</li>');
});
console.log(sortRNums);
答案 2 :(得分:2)
问题是,
var sortRNums = rNums;
不会复制数组。 sortRNums和rNums指向同一个数组。
请查看此主题以获取更多信息: How do you clone an Array of Objects in Javascript?