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 に答える