web-dev-qa-db-ja.com

javascript配列の数値インデックスを確認する

数値インデックスによって集計されたJSONデータを受信して​​います。

たとえば、forloopにいるとき、インデックスは1から始まる場合があります。これは、0が存在しないためにforloopでエラーが発生することを意味します。

Javascript配列に数値インデックスが存在するかどうかを確認するにはどうすればよいですか?

22
jkushner
var a = [1, 2, 3], index = 2;

if ( a[index] !== void 0 ) { /* void 0 === undefined */
    /* See concern about ``undefined'' below.        */
    /* index doesn't point to an undefined item.     */
}
36
andlrc

for(key in data)を使用できるはずです

var data = [];
data[1] = 'a';
data[3] = 'b';

for(var index in data) {
  console.log(index+":"+data[index]);
}
//Output:
// 1-a
// 3-b

インデックスが連続していない場合、データ内の各キー項目をループします。

6
JasonM

実際に記述しているのが Object ではなく Array であるが、次のようなプロパティを持つという事実のような配列の場合 int32_t ですが、必須の length プロパティはありません。次に、このような実際の配列に変換できます。ブラウザの互換性に関しては、 hasOwnProperty のサポートが必要です。

Javascript

function toArray(arrayLike) {
    var array = [],
        i;

    for (i in arrayLike) {
        if (Object.prototype.hasOwnProperty.call(arrayLike, i) && i >= 0 && i <= 4294967295 && parseInt(i) === +i) {
            array[i] = arrayLike[i];
        }
    }

    return array;
}

var object = {
    1: "a",
    30: "b",
    50: "c",
},
array = toArray(object);

console.log(array);

出力

[1: "a", 30: "b", 50: "c"] `

オン jsfiddle

さて、まばらに配列された配列があり、forループを使用して何かをしたいです。

Javascript

var array = [],
    length,
    i;

array[1] = "a";
array[30] = "b";
array[50] = "c";

length = array.length;
for (i = 0; i < length; i += 1) {
    if (Object.prototype.hasOwnProperty.call(array, i)) {
        console.log(i, array[i]);
    }
}

出力

1 "a"
30 "b"
50 "c"

オン jsfiddle

または、 Array.prototype.forEach ブラウザがサポートしている場合、またはリンクしたMDNページで指定されている使用可能なシム、または es5_shim

Javascript

var array = [];

array[1] = "a";
array[30] = "b";
array[50] = "c";

array.forEach(function (element, index) {
    console.log(index, element);
});

出力

1 "a"
30 "b"
50 "c"

オン jsfiddle

0
Xotic750