2

配列の一意の値を取得する関数を JavaScript で記述しようとしていますが、コードが正しく動作しません。他のより良い簡単な方法があることは知っていますが、コードが機能しない理由がわかりません。理解したいと思います。

関数には 2 つの for ループがあり、外側のインデックスと内側のインデックスが異なり、これらのインデックス位置の値が同じである場合、内側のインデックスの位置は別の配列にプッシュされます。内側の for ループが終了すると、他の配列で注釈が付けられたインデックスが元の配列で null 値に置き換えられ、後で削除されます。

入力: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

ただし、出力は次のとおりです。 1 2 null null null null 4 4 4 4 5 5 5 5 5

何がうまくいかないのかわからない、誰か助けてくれる?

function uniqueArrayValues(vector) {
  var indexRepeated = [];
  for (let i in vector) {
    for (let j in vector) {
      if (vector[i] == vector[j] && i != j && j != null && i != null && i < j ) {
        indexRepeated.push(j);
      }
    }
    for (let i in indexRepeated) {
      if (vector[indexRepeated[i]] != null) {
        vector.splice(vector[indexRepeated[i]], 1, null);
      }
    }
  }
}
4

3 に答える 3

3

配列からすべての一意の値を取得する簡単な方法は、配列をセットに変換することです。

let arr = [1,2,2,3,3,3,4,4,4,5,5,5,5,5];

let uniqueArr = new Set(arr);

console.log(uniqueArr); ///Set { 1, 2, 3, 4, 5 }
于 2019-10-13T02:27:22.787 に答える
0

あなたはほとんどそこにいます。

splice()メソッドの最初のパラメーターは、配列の変更を開始するインデックスである開始インデックスです。

あなたのコードでは、そのインデックスの代わりにそのインデックスのを配列にvector.splice(vector[indexRepeated[i]], 1, null);渡しています。これが、予期しない出力の理由です。vector

その行を に変更して値vector.splice(indexRepeated[i], 1, null);をフィルタリングするだけnullです。

実際の例:

function uniqueArrayValues(vector) {
  var indexRepeated = [];
  for (let i in vector) {
    for (let j in vector) {
      if (vector[i] == vector[j] && i != j && j != null && i != null && i < j) {
        indexRepeated.push(j);
      }
    }

  
    for (let i in indexRepeated) {
      if (vector[indexRepeated[i]] != null) {
        vector.splice(indexRepeated[i], 1, null);
      }
    }
  }
 
  return vector.filter(value => value !== null); // Can also use vector.filter(value => value);
}

var arr = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5];

console.log(uniqueArrayValues(arr));

配列から一意の値を取得する他の簡単な方法を次に示します。

1) filter()の使用:

var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];

var unique = arr.filter((value, index, arr) => index === arr.indexOf(value));

console.log(unique);

2) Set()の使用:

var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];

var unique = [...new Set(arr)];

console.log(unique);

于 2019-10-13T02:27:21.170 に答える