Ответ 1
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. */
}
Im, получающий данные json, которые агрегируются численными индексами. Например, если Im в моем forloop, индекс может начинаться с 1, что означает, что в моем forloop произошла ошибка, потому что 0 не существует. Как проверить, существует ли числовой индекс в массиве javascript?
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. */
}
Вы можете использовать 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
Что будет зацикливаться на каждом ключевом элементе в данных, если индексы не смежны.
Если вы фактически описываете Object
, а не Array
, но массив подобен тому, что он имеет свойства uint32_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]);
}
}
Ouput
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