JS如何匹配两个对象数组,判断一个数组的一个属性来改变另外一个数组的属性值

var array1 = [{"id": 30,"isOpen": 0},{"id": 40,"isOpen": 1},{"id": 50,"isOpen": 0}]

var array2 = [{"type": "android","list": [{"id": "30","isShow": true}, {"id": "40","isShow": true}]},{"type": "iOS","list": [{"id": "50","isShow": true}]}]

我现在要拿array2和array1的匹配,先拿到array2的list里面的数据,取出id和array1数组里面的匹配,如果匹配到了id一样的,判断isOpen为0,就把array2匹配到的数据里面的isShow改成false,isOpen=1就改成isShow改成true。

阅读 3.4k
2 个回答
var array1 = [{"id": 30,"isOpen": 0},{"id": 40,"isOpen": 1},{"id": 50,"isOpen": 0}]

var array2 = [{"type": "android","list": [{"id": "30","isShow": true}, {"id": "40","isShow": true}]},{"type": "iOS","list": [{"id": "50","isShow": true}]}]

array2.reduce((ids,item) => {
  item.list.forEach(v => {
    if(v.id in ids) v.isShow = ids[v.id] == 1
  })
  return ids;
}, array1.reduce((res,v) => {
  res[v.id] = v.isOpen;
  return res;
}, {}))


console.log(array2)
function handler(arr1, arr2) {
    let map = {};
    for (let i = 0; i < arr1.length; i++) {
        map[arr1[i].id] = arr1[i].isOpen === 1 ? true : false;
    }
    return arr2.map((item) => {
        for(let i=0;i<item.list.length;i++) {
            const value = item.list[i];
            if (map[value.id]) {
                value.isShow = true;
            } else {
                value.isShow = false;
            }
        }
        return item
    })
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏