javascript - 如何使用JS修改对象数组?

标签 javascript

我有包含数组对象的数据,并且某些对象包含如下所示的对象数组:

原文:

[{
        "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/

相关文章:

javascript - promise – 找不到变量过程

javascript - 尝试让 "eraser"与 HTML5 Canvas 和 Vaadin 一起使用,但它只是清除

javascript - 每 5 秒自动刷新 DIV 内容代码不起作用

javascript - 如何从javascript对象中删除一条记录?

javascript - [ ] 代表什么?

javascript - jquery 和 html 中的表分页

javascript - onChange 在我的 onLoad 函数中无法显示正确答案

javascript - 在浏览器中渲染 SVG 图像 : copy element names to clipboard

javascript - 有没有更简洁的方法来使用 lodash 从数组中删除条目?

javascript - 匹配最后一个冒号之后的字符串