Имеется массив вида:
a[1]['foo'] = 1;
a[2]['bar'] = 2;
Метод forEach отлично работает с этим массивом
a.forEach(function(value){
console.log(value)
})
но если у массива строковые индексы:
a['foo']['foo'] = 1;
a['bar']['bar'] = 2;
тогда метод forEach не выдаёт результат.
Возможно, кто то сталкивался уже с этим, и знает как лечить ?
Да вроде и не должно. forEach
итерирует числовые индексы.
Хотите прогонять строковые ключи, используйте обычный for
:
for (var key in a) {
console.log(a[key]);
}
Всё в javascript суть объекты, даже массивы.
Массив - это упорядоченный набор данных, индексирующийся от 0...
let a = [1, 2, 3]; // Массив чисел
let b = [{v: 1}, {v: 2}, {v: 3}]; // Массив объектов
let c = {one: 1, two: 2, three: 3}; // объект
Метод forEach является методом массивов (Array.prototype.forEach) и реализован примерно так:
Array.prototype.forEach = function(callback){
for (let i = 0; i < this.length; ++i) callback(this[i], i, this);
}
Он ничего не знает про свойства, которые вы добавили в массив, как в объект.
Чтобы проитерировать подобные свойства, можете воспользоваться циклом for .. in
:
for (let i in obj) {
if (!obj.hasOwnProperty(i)) continue;
// ...
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты