排序数组的问题

时间:2012-08-26 19:04:24

标签: javascript jquery

我正在学习javascript,无法在下面的代码中找出问题所在。我想我误解了数组实际上是如何工作的。

问题是警报数组实际上没有排序。我对此有任何见解我将不胜感激:

Here is a ready jsFiddle

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. 点击链接1
  3. 预期结果: 1,2,2

    实际结果: 2,2,1

    我尝试过的事情:

    function shoplist(ids) {
        passedItems.push(ids.slice());
        var newpi = passedItems.slice();
        alert(newpi.sort());
        }
    

3 个答案:

答案 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)

我希望这会奏效:

http://jsfiddle.net/DZpDG/4/