我有从 API(无法更改)发送给我的对象,这些对象遵循这种类型的模式:
{
aaa: {
name: "Aaa",
desc: "..."
},
bbb: {
name: "Bbb",
desc: "..."
},
ccc: {
name: "Ccc",
desc: "...",
stuff: {
foo: {
bar: "bar"
},
keys: ["foo"]
}
},
keys: ["aaa", "bbb", "ccc"]
}
我想做的是将这些对象“扁平化”为客户端上更可用的对象。所以压平上面的对象的结果将是:
[
{
key: "aaa",
name: "Aaa",
desc: "..."
},
{
key: "bbb",
name: "Bbb",
desc: "..."
},
{
key: "ccc",
name: "Ccc",
stuff: [
{ key: "foo", bar: "bar" }
]
}
]
如您所见,我需要遍历 2 个级别的数据。 目前我正在循环并创建新对象(下面简要说明),我只是想知道是否有更优雅的方法来处理这个问题?
var myObjs = [];
$(data.keys).each(function(i, objKey) {
i = $.extend({}, data[objKey], { key: objKey });
myObjs.push(i);
});
最佳答案
这似乎可以满足您的要求:
function flatten(obj) {
return $.map(obj.keys, function(key) {
var res = $.extend({}, obj[key], {key: key});
for (var key in res) {
if (typeof res[key] === 'object') {
res[key] = flatten(res[key]);
}
}
return res;
});
}
参见http://jsfiddle.net/alnitak/pgq2S/
注意:只要您有嵌套对象,这就会继续递归 - 它目前不会停止在两层。
关于javascript - 解析带键 JSON 对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117906/