【问题标题】:Merge duplicate multidimensional objects in array of objects合并对象数组中的重复多维对象
【发布时间】:2018-03-14 23:28:52
【问题描述】:

我正在寻找一种方法来根据 id 值组合数组中的对象。我可以使用filter method 作为顶层使其工作,但不确定如何确保所有子组等都正确合并。这是一个例子:

[
    {
        id: 1,
        name: "A"
        subGroup: [
            {
                id: 1,
                name: "AA"
            }
        ]
    },
    {
        id: 2,
        name: "B"
        subGroup: [
            {
                id: 4,
                name: "DD"
            }
        ]
    },
    {
        id: 1,
        name: "A"
        subGroup: [
            {
                id: 2,
                name: "BB"
            }
        ]
    },
    {
        id: 3,
        name: "C"
        subGroup: [
            {
                id: 5,
                name: "EE"
            }
        ]
    },
    {
        id: 2,
        name: "B"
        subGroup: [
            {
                id: 4,
                other: "Something else"
            }
        ]
    },
    {
        id: 1,
        name: "A"
        subGroup2: [
            {
                id: 7,
                name: "GG"
            }
        ]
    },
    {
        id: 1,
        name: "A"
        subGroup: [
            {
                id: 1,
                name: "AA",
                subSubGroup: [
                    id: 10,
                    name: "II",
                ]
            }
        ]
    }
]

我正在寻找类似的东西并将其合并为:

[
    {
        id: 1,
        name: "A"
        subGroup: [
            {
                id: 1,
                name: "AA",
                subSubGroup: [
                    id: 10,
                    name: "II",
                ]
            },
            {
                id: 2,
                name: "BB"
            }
        ],
        subGroup2: [
            {
                id: 7,
                name: "GG"
            }
        ]
    },
    {
        id: 2,
        name: "B"
        subGroup: [
            {
                id: 4,
                name: "DD",
                other: "Something else"
            }
        ]
    },
    {
        id: 3,
        name: "C"
        subGroup: [
            {
                id: 5,
                name: "EE"
            }
        ]
    }
]

任何帮助将不胜感激。

【问题讨论】:

  • 你的初始数据结构是什么?
  • 第一个代码 sn-p 是初始数据,第二个是我希望如何设置它。
  • 数据之间有什么关系?
  • 我希望通过每个数组中的 id 属性进行组合。子组是组内的部分。

标签: javascript jquery arrays merge


【解决方案1】:

您可以对idname 属性上的数组和组属性使用递归方法。

var data = [{ id: 1, name: "A", subGroup: [{ id: 1, name: "AA" }] }, { id: 2, name: "B", subGroup: [{ id: 4, name: "DD" }] }, { id: 1, name: "A", subGroup: [{ id: 2, name: "BB" }] }, { id: 3, name: "C", subGroup: [{ id: 5, name: "EE" }] }, { id: 2, name: "B", subGroup: [{ id: 4, other: "Something else" }] }, { id: 1, name: "A", subGroup2: [{ id: 7, name: "GG" }] }, { id: 1, name: "A", subGroup: [{ id: 1, name: "AA", subSubGroup: [{ id: 10, name: "II" }] }] }],
    result = [];

data.forEach(function iter(r) {
    return function (o) {
        var ref = r.find(p => o.id === p.id && o.name === p.name);
        if (!ref) {
            r.push(o);
            return;
        }
        Object
            .keys(o)
            .filter(k => Array.isArray(o[k]))
            .forEach(k => o[k].forEach(iter(ref[k] = ref[k] || [])));
    };
}(result));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 谢谢妮娜。仅供查看的任何人参考,这是 ES6 代码,但效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2019-02-27
  • 2019-04-10
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
相关资源
最近更新 更多