大佬帮忙看一下逻辑的问题

var a = [
                {
                    name: 'a',
                    child: [{
                            name: 'bb',
                            limit: 12
                        },
                        {
                            name: 'ss',
                            limit: 12
                        }
                    ]
                }, 
                {
                    name: 'b',
                    child: [{
                            name: 'ss',
                            limit: 12
                        },
                        {
                            name: 'kk',
                            limit: 12
                        }
                    ]
                }, 
                {
                    name: 'c',
                    child: [{
                            name: 'aa',
                            limit: 12
                        },
                        {
                            name: 'mm',
                            limit: 12
                        }
                    ]
                }, 
                {
                    name: 'd',
                    child: [{
                            name: 'aa',
                            limit: 12
                        },
                        {
                            name: 'mm',
                            limit: 12
                        }
                    ]
                }
            ];
            var b = [
                {
                    name: 'b',
                    child: [{
                        name: 'ss'
                    },{
                        name:'kk'
                    }]
                }, 
                {
                    name: 'a',
                    child: [{
                        name: 'ss'
                    }]
                }
            ];
            var c = [];
            a.forEach(function(e) {
                b.forEach(function(i) {
                    if(e.name == i.name) {
                        e.child.forEach(function(j, index1) {
                            i.child.forEach(function(k, index2) {
                                if(j.name !== k.name) {
                                    e.child.splice(index1,1);
                                    console.log(e.child)
                                }
                            })
                        })
                        c.push(e);
                    };
                })
        });
            console.log(c)

我想要找出a里面所有和b name相同的,为什么我找出来是这样的

clipboard.png

阅读 2.6k
5 个回答

你出了什么问题能多花一句话解释一下么

你好好捋一捋,逻辑上是否有问题?要求的输出信息是什么
你提供的代码好像不完整,后面程序实现中的ab等对象不知道哪里来的。

想象一下e.child.forEach遍历到最后一个元素会是什么样子。。

var c = a.filter(e => {
  let index = b.findIndex(f => e.name === f.name)
  if (index === -1) return false
  let child2 = b[index].child
  e.child = e.child.filter(g => {
    let index = child2.findIndex(h => g.name === h.name)
    return index !== -1
  })
  return true
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题