数组A根据数组B的状态而重新返回新的数组A

118 阅读1分钟

现在有两个数组(分别为A和B),数组A有skill数组属性,而其下默认的每一项的isChecked为false; 而数组B同样也有skill数组属性,而其下默认的每一项的isChecked为true; 现需要将数组A的skill数组里面跟数组B的skill的相同数据也将isChecked变为true,代码如下:

let arr1 = [
            {
                id: 1,
                name: '麦迪',
                skill: [
                    {
                        uid: 1,
                        title: '干拔',
                        isChecked: false
                    },
                    {
                        uid: 2,
                        title: '突破',
                        isChecked: false
                    },
                    {
                        uid: 3,
                        title: '变向',
                        isChecked: false
                    }
                ]
            },
            {
                id: 2,
                name: '科比',
                skill: [
                    {
                        uid: 1,
                        title: '急停跳投',
                        isChecked: false
                    },
                    {
                        uid: 2,
                        title: '扣篮',
                        isChecked: false
                    },
                    {
                        uid: 3,
                        title: '突破',
                        isChecked: false
                    }
                ]
            }
        ]


        let arr2 = [
            {
                id: 1,
                name: '麦迪',
                skill: [
                    {
                        uid: 1,
                        title: '干拔',
                        isChecked: true
                    }
                ]
            },
            {
                id: 2,
                name: '科比',
                skill: [
                    {
                        uid: 2,
                        title: '扣篮',
                        isChecked: true
                    }
                ]
            }
        ]

        let flagArr = arr1.map((item, index) => {
            for (let i = 0; i < arr2.length; i++) {
                if (item.id == arr2[i].id) {
                    return {
                        ...item,
                        skill: item.skill.map((_item, _index) => {
                            for (let j = 0; j < arr2[i].skill.length; j++) {
                                if (arr2[i].skill[j].uid == _item.uid) {
                                    return {
                                        ..._item,
                                        isChecked: true
                                    }
                                }
                            }
                            return _item
                        })
                    }

                }
            }
            return item;
        })

        console.log('flagArr', flagArr)

打印结果如下:

image.png