Проверка числового индекса в массиве javascript [закрыто]

Im получает данные json, которые агрегируются по числовым индексам. Например, когда Im в моем forloop, индекс может начинаться с 1, Что означает, что в моем forloop произойдет ошибка, потому что 0 не существует. Как проверить, существует ли числовой индекс в массиве javascript?

3 ответов


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"]`

On 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"

On 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"

On jsfiddle