在javascript中动态创建复杂对象

时间:2016-03-18 18:30:43

标签: javascript object

是否可以在运行时在javascript中创建复杂对象?如果是这样,那么正确的语法是什么?

var food = {};
food["fruit"]["yellow"] = "banana";
food["meat"]["red"] = "steak";
food."fruit"."green" = "apple";

2 个答案:

答案 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);