是否可以在运行时在javascript中创建复杂对象?如果是这样,那么正确的语法是什么?
var food = {};
food["fruit"]["yellow"] = "banana";
food["meat"]["red"] = "steak";
food."fruit"."green" = "apple";
答案 0 :(得分:2)
我们不清楚你要做什么。如果你想一次性建立那个对象,那么你可以做类似的事情:
var food = {
fruit: {
yellow: 'banana',
green: 'apple'
},
meat: {
red: 'steak'
}
};
如果您需要一次将一个嵌套对象拼凑在一起,那么您只需要确保创建一个新对象以添加属性。
例如,您的行:
food["fruit"]["yellow"] = "banana";
可能会失败,因为food.fruit
不存在。
你应该这样做:
var food = {};
food.fruit = {};
food.fruit.yellow = 'banana';
答案 1 :(得分:1)
您可以编写一个函数来向对象添加数据。 e.g。
function addEntry(obj, entry) {
if(entry.length < 2) return;
if(entry.length === 2) obj[entry[0]] = entry[1];
else {
if(!obj[entry[0]] || typeof obj[entry[0]] !== "object") obj[entry[0]] = {};
addEntry(obj[entry[0]], entry.slice(1));
}
}
var data = [
["fruit", "yellow", "banana"],
["meat", "red", "steak"],
["fruit", "green", "apple"]
];
var obj = {};
for(var i = 0; i < data.length; i++) {
addEntry(obj, data[i]);
}
console.log(obj);