2

このコードが範囲外のエラーをスローするのはなぜですか。正常に機能するはずです。

var a = [[[3,4],[0,0],[0,6],[7,8],[0,9],[8,3]]];
    var b = [3,4];
    console.log(jQuery.inArray(b,a[0][0]));
4

2 に答える 2

3

そこにないので、あなたはそれを見つけることができません。JavaScript では、2 つの配列の内容が似ているからといって、配列自体が等しいとは限りません。コンソールで次のことを試してください。

[3,4] === [3,4];

false2 つの同様の配列は同じ配列ではないため、出力は の出力になります。このコードを機能させたい場合は、次のように実際に 1 つの配列を別の配列に配置する必要があります。

var a = [3,4];
var b = [5,a]; // [5,[3,4]]

jQuery.inArray(a, b); // a is found at index 1

干し草の山内に同様の配列が存在するかどうかを確認するだけの場合は、針と干し草の山全体を文字列化して、部分文字列を探すことができます。

var needle = JSON.stringify([3,4]);
var haystack = JSON.stringify([[3,4],[5,6]]);

haystack.indexOf(needle); // needle string found at index 1

ただし、返されるインデックスは文字列化された表現が見つかったインデックスであり、干し草の山内で配列が見つかった実際のインデックスではないことに注意してください。配列の真のインデックスを見つけたい場合は、このロジックを少し変更する必要があります。

var needle = JSON.stringify([3,4]),
    haystack = [[3,4],[5,6]],
    position = -1,
    i;

for (i = 0; i < haystack.length; i++) {
    if (needle === JSON.stringify(haystack[i])) {
        position = i;
    }
}

console.log(position); // needle found at index 0​​​

このコードを実行してください: http://jsfiddle.net/DTf5Y/

于 2012-11-18T17:03:51.613 に答える
0

問題は、中括弧が多すぎることです。

var a = [[[3,4],[0,0],[0,6],[7,8],[0,9],[8,3]]];
    var b = [3,4];
    console.log(jQuery.inArray('b',a[0][0]));

する必要があります

var a = [[3,4],[0,0],[0,6],[7,8],[0,9],[8,3]];
    var b = [3,4];
    console.log(jQuery.inArray('b',a[0][0]));
于 2012-11-18T17:08:35.547 に答える