0

別の配列から一意の値の新しい配列を作成するこの投稿 ( JavaScript 配列から重複を削除する) について。

問題のコード:

uniqueArray = myArray.filter(function(elem, pos) {
    return myArray.indexOf(elem) == pos;
})

これをテストデータとして使用:

var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];

望ましい結果は、一意の値のみを持つ配列です。

var unique_names = ["Mike","Matt","Nancy","Adam","Jenny","Carl"];

私がいる場所:

filter は配列の各メンバーに対して関数を実行すること、elem はレビュー対象の要素、pos はそのインデックスであることを理解しています。なんらかの理由でその関数が false を返す場合、その要素は新しい配列に含まれません。それで、それを通り抜けると、これが起こります:

  1. myArray.indexOf("Mike") は 0 と同じですか? はい、新しい配列に「Mike」を追加します。
  2. myArray.indexOf("Matt") は 1 と同じですか? はい、新しい配列に「Matt」を追加します。
  3. myArray.indexOf("Nancy") は 2 と同じですか? はい、新しい配列に「Nancy」を追加します。

[すべての要素について繰り返します。すべて合格。 ]

基本的に、2番目のナンシーがfalseと評価される理由がわかりません。

4

2 に答える 2

1

indexof は要素の最初の出現のインデックスであるため、2 番目の Nancy は最初の Nancy のインデックスを取得し、除外されます。

于 2013-03-29T20:40:57.823 に答える
1

6) myArray.indexOf("Nancy") は 5 と同じですか? いいえ (ステップ 3 と同じように 2 です)、複製された "Nancy" はスキップします。

indexOfアイテムの最初の出現を示します。

于 2013-03-29T20:41:47.367 に答える