寻找一种方法来合并Javascript对象键在数组内,只匹配id.地图吗?flatmap吗?



寻找一种方法将Javascript对象键合并到数组中,仅在匹配id上。我应该使用地图吗?还是flatmap ?我有

const districtList =[
  { id:'1234blah', companyId:'09871345', districtName:'abc1' },
  { id:'2341blah', companyId:'87134590', districtName:'abc2' },
  { id:'3412blah', companyId:'09134587', districtName:'abc3' },
]

const companyList =[
  {id:'09871345', companyName:'CompanyOne',   info:'some'  },
  {id:'87134590', companyName:'CompanyTwo',   info:'stuff' },
  {id:'09134587', companyName:'CompanyThree', info:'todo'  },
]

但我想要的是数据从公司数组内的地区数组,以获得缺失的公司名称,和其他信息。

const improvedDistrictList =[
  { id:'1234blah', companyId:'09871345', districtName:'abc1', companyName:'CompanyOne',   info:'some'  },
  { id:'2341blah', companyId:'87134590', districtName:'abc2', companyName:'CompanyTwo',   info:'stuff' },
  { id:'3412blah', companyId:'09134587', districtName:'abc3', companyName:'CompanyThree', info:'todo'  },
]

我会通过地区列表进行映射,根据companyId为每个公司找到相应的公司,然后只需向新数组添加更多字段,但有一个警告:看起来您的companyList数组可能包含也可能不包含companyName。比如:

const districtList =[
    {id:'1234blah',companyId:'09871345', districtName:'abc1'},
    {id:'2341blah',companyId:'87134590', districtName:'abc2'},
    {id:'3412blah',companyId:'09134587', districtName:'abc3'},
]
const companyList =[
    {id:'09871345',companyName:'CompanyOne', info:'some'},
    {id:'87134590',companyId:'CompanyTwo', info:'stuff'},
    {id:'09134587',companyId:'CompanyThree', info:'todo'},
]
const result = districtList.map(item => {
    const company = companyList.find(c => c.id === item.companyId);
    return {...item, [company.companyName ? 'companyName' : 'companyId']: company.companyName ? company.companyName : company.companyId, info: company.info }
})
console.log(result)

此外,正如在评论中指出的那样,您最终不会在结果数组中得到2个companyId键,因为后者将覆盖前者。

这样…

const districtList =[
  { id:'1234blah', companyId:'09871345', districtName:'abc1' },
  { id:'2341blah', companyId:'87134590', districtName:'abc2' },
  { id:'3412blah', companyId:'09134587', districtName:'abc3' },
]
const companyList =[
  {id:'09871345', companyName:'CompanyOne',   info:'some'  },
  {id:'87134590', companyName:'CompanyTwo',   info:'stuff' },
  {id:'09134587', companyName:'CompanyThree', info:'todo'  },
]
const improvedDistrictList = companyList.map(cl=>
  ({...cl,...districtList.find(x=>x.companyId===cl.id)}))
  
console.log( improvedDistrictList )
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新