3

持っているかどうかを確認する方法arraysarray

var arrays = [[1, 1], [2, 2]];
var array = [1,1];

[1, 1] === [1, 1]; // false
arrays.includes(array); // false
arrays.indexOf(array); // -1
4

3 に答える 3

4

indexOfは、厳密な等式(===)を使用して比較します。要素はまったく同じオブジェクトである必要があります。

それで

var a = [1,1];

var b = [a,[1,2]];

b.indexOf(a)// 0

なぜならa === a

しかし

b.indexOf([1,1])// -1

[1,1]はそれとは異なるオブジェクトでaあるため、厳密には等しくありません。

MDNDocs

やりたいことをするためには、もっと複雑なことをする必要があります。値をループして、この質問の回答にあるもののようなものを使用して比較を行うことができます

于 2013-03-26T00:54:08.790 に答える
1

indexOf配列に一致するものが見つからない場合は-1を返します。配列aに要素が含まれていませんb

編集:

@JonathanLonowskiが言ったことを明確にするために、一致がない理由は、値ではなく参照を比較して厳密な比較を行っているためです。

于 2013-03-26T00:47:36.463 に答える
0

<Array>.someメソッドは、多次元配列内の少なくとも1つの配列が、提供された関数によって実装されたテストに合格するかどうかをテストします。

<Array>.everyメソッドは、配列内のすべての配列項目が、提供された関数によって実装されたテストに合格するかどうかをテストします。

これらの2つの方法を組み合わせると、多次元配列の配列のすべての項目が、求めているものの価値があるかどうかを確認できます。

const checkArray = (arrays, array) => arrays.some(a => {
  return (a.length > array.length ? a : array).every((_, i) => a[i] === array[i]);
});

const arrays = [[0, 1], [2, 2], [0, 3, 2, 1]];

[
  [0, 1],          // true
  [2, 2],          // true
  [0, 3, 2, 1],    // true
  [1, 0, 3, 2, 1], // false
  [2, 2, 1],       // false
  [0, 0],          // false
  [1, 2],          // false
  [0, 1, 2]        // false
].forEach(array => {
  console.log(checkArray(arrays, array));
});

于 2021-12-23T16:24:20.303 に答える