В основном я тестирую ES6 и хочу попробовать и вернуть объект объектов из массива объектов, каждый объект в массиве имеет идентификатор и родительский элемент, идентификатор будет именем собственность, содержащаяся в родительском доме. Достаточно просто, вот мой код:проблема с объектом объектов
//an array of objects
let animals = [{
id: "animal",
parent: null
}, {
id: "dog",
parent: "animal"
}, {
id: "cat",
parent: "animal"
}, {
id: "fish",
parent: "animal"
}, {
id: "labrador",
parent: "dog"
}, {
id: "cocker spaniel",
parent: "dog"
}, {
id: "bass",
parent: "fish"
}, {
id: "tuna",
parent: "fish"
}, {
id: "house cat",
parent: "cat"
}, {
id: "outdoor cat",
parent: "cat"
}, {
id: "human",
parent: "animal"
}, {
id: "man",
parent: "human"
}, {
id: "woman",
parent: "human"
}];
//a recursive function to build our object of objects tree
let makeTreeOfCategories = (categories, parent) => {
let parentNode = {};
categories
.filter(category => category.parent === parent)
.forEach(category => parentNode[category.id] =
makeTreeOfCategories(categories, category.id));
return parentNode;
};
console.log(JSON.stringify(makeTreeOfTrees(animals, null), null, 2));
Этот код возврата:
{
"animal": {
"dog": {
"labrador": {},
"cocker spaniel": {}
},
"cat": {
"house cat": {},
"outdoor cat": {}
},
"fish": {
"bass": {},
"tuna": {}
},
"human": {
"man": {},
"woman": {}
}
}
}
Теперь, если мы выполним следующее:
//call our object and store in a variable
let obj = makeTreeOfCategories(animals, null);
//loop through the object and alert each child item and its children
for (var key in obj) {
var val = obj[key];
alert("Key: " + key + " value:" + val);
}
он предупреждает один раз, говоря «Ключ: значение для животных: [Объект объекта] ", но я не понимаю, почему, я ожидаю, что он вернется с ключом: значение для животных: собака, затем« ключ: значение животного: кошка »и т. д.
Вы знаете, в основном позволяя мне проходить через каждый объект внутри объекта объектов и уведомлять его свойства и их значения.
Кроме того, если вы могли бы сказать мне это тоже, как бы я получить доступ к что-то вроде:
{}.animal.dog.labrador
Если бы я искал что-то конкретное, например, если Лабрадор имел свойство имя, например.
Я надеюсь, что это имеет смысл, я думаю, что я просто запутываю себя, если что-то только сейчас, но надеюсь, что я ясно дал понять, что я пробовал, и что бы я хотел.
Приветствия, SD
возможный дубликат [Преобразование объекта в строку] (http://stackoverflow.com/q/5612787/1048572) или [Почему объект [Object Object] 'упоминает" дважды?] (http://stackoverflow.com/q/29847665/1048572) – Bergi