У меня есть объект объектов:
let obj = {
a: {
af: {
key: "k", val: "v"
},
bf: {
key: "g", val: "h"
}
},
b: {
af: {
key: "f", val: "w"
},
nf: {
key: "u", val: "t"
}
}
};`
Я пытаюсь получить массив всех значений, связанных с key
, в данном случае: ["k","g","f","u"]
Я пытался использовать Object.entries()
в цикле for, но я не понимаю, как это работает. Я сделал просто как в документах:
for ([k,v] in Object.entries(obj)){
console.info(k,v)
}
но мой результат
0 не определено
1 не определено
чего я совершенно не понимаю. Не могли бы вы помочь мне объяснить, как работает этот короткий код?
let obj = {a: {af: {key: "k", val: "v"}, bf: {key: "g", val: "h"}}, b: {af: {key: "f", val: "w"}, nf: {key: "u", val: "t"}}};
for ([k,v] in Object.entries(obj)){
console.info(k,v)
}
🤔 А знаете ли вы, что...
JavaScript - это скриптовый язык программирования, разработанный Netscape Communications Corporation.
for-in
перебирает ключи объекта, не включая значения. Object.entries()
возвращает итератор, а не объект.
Используйте forEach()
для повторения его результатов:
let obj = {a: {af: {key: "k", val: "v"}, bf: {key: "g", val: "h"}}, b: {af: {key: "f", val: "w"}, nf: {key: "u", val: "t"}}};
Object.entries(obj).forEach(([k, v]) => console.info(k, v));
Object.entries(obj)
возвращает массив. Каждый элемент массива представляет одно свойство объекта, выраженное в виде массива, содержащего имя свойства и значение свойства.
x in someObject
получает итерируемые имена свойств объекта.
Имена свойств в массиве являются числовыми индексами.
Следовательно, ваш вывод:
const [x,y] = "0";
console.info({x,y});
Если вы хотите перебирать значения свойств вместо имен свойств, вам нужен of
(который перебирает значения), а не in
.
let obj = {a: {af: {key: "k", val: "v"}, bf: {key: "g", val: "h"}}, b: {af: {key: "f", val: "w"}, nf: {key: "u", val: "t"}}};
for ([k,v] of Object.entries(obj)){
console.info(k,v)
}
Однако цикл по массиву, вероятно, следует выполнять с помощью forEach
(или традиционного цикла for из трех частей), поскольку он не споткнется о неожиданные перечисляемые свойства, которые могут быть добавлены к вашему массиву.
let obj = {a: {af: {key: "k", val: "v"}, bf: {key: "g", val: "h"}}, b: {af: {key: "f", val: "w"}, nf: {key: "u", val: "t"}}};
Object.entries(obj).forEach( ([k,v]) => console.info({k,v}) );