1

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

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

这是一个现成的 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

预期结果: 1、2、2

实际结果: 2、2、1

我尝试过的事情:

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

3 回答 3

2

我认为您使用错误的排序功能。如果要以数字方式使用排序函数,则必须包含排序函数。如果你想对事物进行数字排序,你应该使用这个函数(在链接中提供):

(function(a,b){return a-b});

因此,在您的 newpi 场景中,它看起来像这样:

newpi.sort(function(a,b){return a-b});
于 2012-08-26T19:08:51.157 回答
1

您正在向另一个数组添加一个数组,即 , 的结果ids.slice()。这就是为什么排序不能按预期工作的原因。concat如果要将 的内容添加idspassedItems数组中,请改用:

passedItems = passedItems.concat(ids);

ids此外,您应该使用而不是向数组添加字符串.push(parseInt(this.id)),然后使用:

passedItems.sort(function (a, b) {
  return a - b;
});
于 2012-08-26T19:10:54.513 回答
0

我希望这会奏效:

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

于 2012-08-26T19:15:12.573 回答