首页 > 解决方案 > 过滤具有相同 id 的对象数组

问题描述

假设我有一个这样的json:

[
    {
        id: 3,
        name: 'A',
        depth:0
    },
    {
        id: 2,
        name: 'C'
        depth:1
    },
    {
        id: 3,
        name: 'B',
        depth:1
    },
    {
        id: 1,
        name: 'Z'
    },
    {
        id: 2,
        name: 'F',
        depth:0
    }
]

我想做的是使用这些规则创建另一个对象数组:

1:在数组中找到相同的id

2:检查深度(所以如果深度为0,它应该是父元素,如果深度为1,它应该是深度为0的元素的子元素)

像这样 :

[
    {
        id: 3,
        name: 'A',
        depth:0,
        child:[
            {
                id: 3,
                name: 'B',
                depth:1
            },
        ]
    },
    {
        id: 1,
        name: 'Z'
    },
    {
        id: 2,
        name: 'F',
        depth:0,
        child:[
            {
                id: 2,
                name: 'C',
                depth:1,

            },
        ]
    }
]

任何帮助将不胜感激?

标签: javascriptarrays

解决方案


干得好..

    var a = [
        {
            id: 3,
            name: 'A',
            depth:0
        },
        {
            id: 2,
            name: 'C',
            depth:1
        },
        {
            id: 3,
            name: 'B',
            depth:1
        },
        {
            id: 1,
            name: 'Z'
        },
        {
            id: 2,
            name: 'F',
            depth:0
        }]
        var c = a.filter(a => a.depth == 0);
        var zeroDepth = a.filter(a => a.depth === undefined);
        zeroDepth.forEach(z => c.push(z));
        a.forEach(a => 
          {
            if(a.depth == 1){
            c.forEach(c => 
            {
              if(c.id == a.id){
                c.child = [];
                c.child.push(a);
    			    }
    		    })
    	    }
        })
    console.log(c);


推荐阅读