Как проитерировать объект с помощью forEach, если он похож на итерируемый, но таковым не является?
Существует объект:
let obj = {
1: {name: "name1", value: 123},
2: {name: "name1", value: 456}
}
Он похож на итерируемый объект, но таковым не является, ведь так?
Я сделал вывод, что объект obj неитерируемый после того, как применил к нему метод Array.from
let obj = {
1: {name: "name1", value: 123},
2: {name: "name1", value: 456}
}
let arr = Array.from(obj);
console.log(obj);
console.log(arr);
Мне нужно перебрать циклом forEach объект obj, например, так:
let obj = {
1: {name: "name1", value: 123},
2: {name: "name1", value: 456}
};
obj.forEach(function(element) {
console.log(element.name);
});
И даже так пробую:
let obj = {
1: {name: "name1", value: 123},
2: {name: "name1", value: 456}
};
[].forEach.call(obj, function(element) {
console.log(element.name);
});
Безрезультатно.
Вопрос в том, каким образом можно привести объект obj к такому виду:
[{name: "name1", value: 123}, {name: "name1", value: 456}] или как его перебрать с помощью forEach?
Ответы (1 шт):
Чтобы сделать объект array-like, ему нужно добавить свойство length, значение которого должно быть больше любого целочисленного индекса в объекте.
let obj = {
1: {
name: "name1",
value: 123
},
2: {
name: "name1",
value: 456
},
length: 3
}
let arr = Array.from(obj);
[].forEach.call(obj, function(element) {
console.log(element);
});
console.log(arr);
Кроме того, если исходные индексы не важны, можно воспользоваться методом Object.values
let obj = {
1: {
name: "name1",
value: 123
},
2: {
name: "name1",
value: 456
}
}
Object.values(obj).forEach(function(element) {
console.log(element);
});
А также, никто не отменял обычный for..in позволяющий перебирать ключи объекта
let obj = {
1: {
name: "name1",
value: 123
},
2: {
name: "name1",
value: 456
}
}
for (var key in obj) {
var element = obj[key];
console.log(element);
};