我正在学习javascript,无法在下面的代码中找出问题所在。我想我误解了数组实际上是如何工作的。
问题是警报数组实际上没有排序。我对此有任何见解我将不胜感激:
HTML:
<html>
<head>
<title>
Test 1
</title>
<script src="http://code.jquery.com/jquery-latest.js" type=
"text/javascript">
</script>
</head>
<body>
<div class="items">
<ul>
<li>
<a href="#" id="1">Link 1</a>
</li>
<li>
<a href="#" id="2">Link 2</a>
</li>
<li>
<a href="#" id="3">Link 3</a>
</li>
<li>
<a href="#" id="4">Link 4</a>
</li>
</ul>
</div>
</body>
</html>
使用Javascript:
var clickedLinks = [];
var passedItems = [];
// Collect clicked link IDs into an array and pass the array as an argument to shoplist()
$('.items a').click(function () {
if (clickedLinks.indexOf(this.id) != -1) {
var linkIndex = clickedLinks.indexOf(this.id);
clickedLinks.splice(linkIndex, 1);
} else {
clickedLinks.push(this.id);
}
shoplist(clickedLinks);
});
function shoplist(ids) {
passedItems.push(ids.slice());
alert(passedItems.sort());
}
重现的步骤:
预期结果: 1,2,2
实际结果: 2,2,1
我尝试过的事情:
function shoplist(ids) {
passedItems.push(ids.slice());
var newpi = passedItems.slice();
alert(newpi.sort());
}
答案 0 :(得分:2)
我认为您使用的是sort function错误。如果要以数字方式使用排序功能,则必须包含排序功能。如果要以数字方式对事物进行排序,则应使用此功能(在链接中提供):
(function(a,b){return a-b});
所以在你的newpi场景中,它看起来像这样:
newpi.sort(function(a,b){return a-b});
答案 1 :(得分:1)
您正在将一个数组(ids.slice()
的结果)添加到另一个数组中。这就是为什么排序不能按预期工作的原因。如果您要将concat
的内容添加到ids
数组,请使用passedItems
:
passedItems = passedItems.concat(ids);
此外,您应该使用ids
而不是向.push(parseInt(this.id))
数组添加字符串,然后使用:
passedItems.sort(function (a, b) {
return a - b;
});
答案 2 :(得分:0)
我希望这会奏效: