【发布时间】:2015-11-03 04:52:17
【问题描述】:
基本上我正在测试 ES6 并想尝试从对象数组中返回一个对象对象,数组中的每个对象都有一个 id 和一个父对象,id 将是父对象中保存的属性的名称。很简单,这是我的代码:
//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
如果我正在寻找特定的东西,例如拉布拉多有一个名为 name 的属性。
我希望这是有道理的,我想我只是在混淆自己,如果有的话,但我希望我能清楚地说明我已经尝试过什么以及我希望发生什么。
干杯, 标清
【问题讨论】:
标签: javascript