我有包含数组对象的数据,并且某些对象包含如下所示的对象数组:
原文:
[{
"order": 1,
"product": "A",
"item": "A"
}, {
"order": 1,
"product": "B",
"item": "B"
},
{
"order": 14,
"product": "C",
"item": "C",
"lists": [{
"order": 1,
"product": "C1",
"item": "c1"
}, {
"order": 1,
"product": "c2",
"item": "c3"
}]
}, {
"order": 1,
"product": "d",
"item": "d"
}, {
"order": 72,
"product": "e",
"item": "e",
"lists": [{
"order": 2,
"product": "e1",
"item": "e1"
}, {
"order": 6,
"product": "e2",
"item": "e2"
}]
}, {
"order": 1,
"product": "e3",
"item": "e3"
}
]
我想更改数据,例如对象数组,如下所示,
修改:
[{
"order": 1,
"product": "A",
"item": "A"
}, {
"order": 1,
"product": "B",
"item": "B"
}, {
"order": 14,
"product": "C",
"item": "C"
}, {
"order": 1,
"product": "C1",
"item": "c1"
}, {
"order": 1,
"product": "c2",
"item": "c3"
}, {
"order": 1,
"product": "d",
"item": "d"
}, {
"order": 72,
"product": "e",
"item": "e"
}, {
"order": 2,
"product": "e1",
"item": "e1"
}, {
"order": 6,
"product": "e2",
"item": "e2"
}, {
"order": 1,
"product": "e3",
"item": "e3"
}]
最佳答案
您可以使用 Array#reduce
并检查 lists
并将新数组与实际值和 lists
项连接起来,否则采用实际元素。
var data = [{ order: 1, product: "A", item: "A" }, { order: 1, product: "B", item: "B" }, { order: 14, product: "C", item: "C", lists: [{ order: 1, product: "C1", item: "c1" }, { order: 1, product: "c2", item: "c3" }] }, { order: 1, product: "d", item: "d" }, { order: 72, product: "e", item: "e", lists: [{ order: 2, product: "e1", item: "e1" }, { order: 6, product: "e2", item: "e2" }] }, { order: 1, product: "e3", item: "e3" }],
flat = data.reduce(function (r, a) {
return r.concat(a.lists && [{ order: a.order, product: a.product, item: a.item }].concat(a.lists) || a);
}, []);
console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 如何使用JS修改对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41585159/