0

配列に特定の値の配列が含まれているかどうかを確認する方法はありますか?

のように、私はこの配列を持っています

 drawn[0] = [0,0]

後でまだ含まれているかどうかを確認し[0,0]たいので、次のようにします

 drawn[0] == [0,0]

しかし、これは単にを返しますfalse、なぜですか?そして、もっと重要なことに、代わりに何をすべきですか?やってみても[0,0] == [0,0]お返しfalseになりますか?

配列が常にゼロになるとは限らないことに注意してください...

追伸 外部ライブラリは使いたくないので、そのままにしておいてください。

4

4 に答える 4

4

配列はオブジェクトであるため比較できないと誰もが言っています。それは本当です。ネストされたループ(露骨にまたは抽象化された)を含むいくつかの実行可能なソリューションがあります。他の人もこれを提案しています。

toStringより単純な可能性がある代替手段は、2 つの配列の値を比較することです。

drawn[0].toString() == [0,0].toString()

これには、配列の内容が同じ順序である必要があります。

于 2013-02-22T02:15:41.690 に答える
3

JavaScript の配列は、同じオブジェクトである場合にのみ互いに​​等しくなります。

代わりに内容チェックを行う必要があります。

if (drawn[0].every(function(item) { return item === 0; })) {
    // all entries are zero.
}

以下も参照してください。Array.every()

または、特定のケースでは、単純に:

if (drawn[0][0] === 0 && drawn[0][1] === 0) {
    // equal to [0, 0]
}
于 2013-02-22T02:13:18.190 に答える
2

for ループで確認してください。値ではなく参照を比較するため、単純な比較では比較できません。

[0]    !== [0]    // true
[0][0] ==  [0][0] //true
于 2013-02-22T02:14:12.720 に答える
0

配列を含むオブジェクトは、オブジェクト ID によって比較されます。書き込む[0, 0]たびに、新しい配列を作成します。そのため、それらは異なるオブジェクトとして登録されます。要素を繰り返し処理し、要素が同じかどうかを調べる必要があります。

于 2013-02-22T02:13:51.833 に答える