代码之家  ›  专栏  ›  技术社区  ›  xkeshav

如何合并与其他数组中的属性匹配的对象数组

  •  1
  • xkeshav  · 技术社区  · 6 年前

    我想合并两个数组来创建一个新的数组,它基于键具有更新值,但无法实现。我正在寻找一个使用ES6/ES7方法的更简单的解决方案。

     let selectedID = [
        {
            "id": 7,
            "selected": true
        },
        {
            "id": 1,        
            "selected": true
        }
    ];
    
    let baseID = [
        {
            "id": 7,
            "selected": false
        },
        {
            "id": 12,
            "selected": false
        },
        {
            "id": 13,
            "selected": false
        },
        {
            "id": 1,
            "selected": false
        },
        {
            "id": 9,
            "selected": false
        },
        {
            "id": 10,
            "selected": false
        }
    ];
    
    
    const op = baseID.map( b => {
        return selectedID.map( f => {
         if(f.id === s.id) {
             return f;
         } else {
          return b;
         }
       });
    });
    
    console.log(op);
    

    但它返回一个项目数组,每个项目由2个对象组成。

    [[ 
    {id: 7, selected: true}
    {id: 7, selected: false}
    ,[],...]
    

    预期输出:

    [{
                "id": 7,
                "selected": true
            },
            {
                "id": 12,
                "selected": false
            },
            {
                "id": 13,
                "selected": false
            },
            {
                "id": 1,
                "selected": true
            },
            {
                "id": 9,
                "selected": false
            },
            {
                "id": 10,
                "selected": false
            }
        ]
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Alberto Trindade Tavares    6 年前

    你可以用 find 具有 map 查找 selectedID 数组:

    let selectedID = [
      {
        id: 7,
        selected: true
      },
      {
        id: 1,
        selected: true
      }
    ];
    
    let baseID = [
      {
        id: 7,
        selected: false
      },
      {
        id: 12,
        selected: false
      },
      {
        id: 13,
        selected: false
      },
      {
        id: 1,
        selected: false
      },
      {
        id: 9,
        selected: false
      },
      {
        id: 10,
        selected: false
      }
    ];
    
    const op = baseID.map(
      item => selectedID.find(selectedItem => item.id === selectedItem.id) || item
    );
    
    console.log(op);