分解许多javascript对象

时间:2015-10-08 15:15:55

标签: javascript arrays

我在一个长数组中有几个javascript对象,例如:

[{"name": "bob", "values": {"A": 1, "B": 2, "C": 3}}, 
 {"name": "ted", "values": {"A": 4, "B": 5, "C": 6}},
                 ...
]

将此数组转换为以下内容的简洁快捷方式是什么:

[{"name": "bob", "A": 1},
 {"name": "bob", "B": 2},
 {"name": "bob", "C": 3},
 {"name": "ted", "A": 4},
 {"name": "ted", "B": 5},
 {"name": "ted", "C": 6},
         ...
]

我对javascript有点新,我对"对"感兴趣如何处理这项任务。

2 个答案:

答案 0 :(得分:1)

通过数组迭代(a.k.a。" loop"),并在每次迭代中迭代“'值”'包含在其中的对象。

var from = [
        {"name": "bob", "values": {"A": 1, "B": 2, "C": 3}}, 
        {"name": "ted", "values": {"A": 4, "B": 5, "C": 6}}
    ],
    to = [],
    i, person, valueKey, newObj;

for (i = 0; i < from.length; i++) {
    person = from[i];

    for (valueKey in person.values) {
        newObj = {};
        newObj.name = person.name;
        newObj[valueKey] = person.values[valueKey];

        to.push(newObj);
    }
}

console.log(to);

Working example at JSBin

答案 1 :(得分:1)

使用LoDash,您可以执行以下操作:

var result = _.transform(people, function(memo, person) {
    var r = { name: person.name };
    _.each(person.values, function(number, letter) { r[letter] = number; });
    return memo.push(r);
});

这里是JSFiddle