JavaScript如何对两个对象数组进行映射?

3

我有两个数组:

const people = [{id:1, name:"John"}, {id:2, name:"Alice"}];
const address = [{id:1, peopleId: 1, address: "Some street 1"}, {id:2, peopleId: 2, address: "Some street 2"}]

我该如何筛选这两个数组并得到一个像这样的结果:
const fullData = [{id: 1, name: "John", address: "Some street 1"}, {id: 2, name: "Alice", address: "Some street 2"}]

1
可能是如何动态合并两个JavaScript对象的属性?的重复问题。 - ksav
4个回答

18

你可以尝试这样做。

利用map()find()的帮助。

const people = [{id:1, name:"John"}, {id:2, name:"Alice"}];
const address = [{id:1, peopleId: 1, address: 'Some street 1'}, {id:2, peopleId: 2, address: 'Some street 2'}]

let op = people.map((e,i)=>{
  let temp = address.find(element=> element.id === e.id)
  if(temp.address) {
    e.address = temp.address;
  }
  return e;
})
console.log(op);


我不是完全确定,但我认为address中的匹配器是peopleId,而id只是地址行标识符。 - nicholaswmin
@NicholasKyriakides 那个id是用来那个目的的。不知道OP怎么使用的。 - Code Maniac
如果一个人没有地址,你的 map 会抛出 TypeError 错误,对吗? - nicholaswmin
@NicholasKyriakides 没有被问到。无论如何,已添加了一个检查。 - Code Maniac

4

就像这样:

const persons = [{id:1, name: 'John'}, {id:2, name: 'Alice'}]

const addresses = [{id:1, peopleId: 1, address: 'Some street 1'}, {id:2, peopleId: 2, address: 'Some street 2'}]

const result = persons.map(person => {
  const addressItem = addresses.find(address => address.peopleId === person.id)
  
  person.address = addressItem 
  ? addressItem.address
  : null
  
  return person
})

console.log(result)


0
你可以使用 reduce 来实现这个功能,

const people = [{id:1, name:"John"}, {id:2, name:"Alice"}];
const address = [{id:1, peopleId: 1, address: 'Some street 1'}, {id:2, peopleId: 2, address: 'Some street 2'}]


const res = people.reduce((acc, curr) => {
  const index = address.findIndex(item => item.peopleId === curr.id);
  if(index > -1) {
    curr.address = address[index].address;
  }
  
  acc.push(curr);
  return acc;
}, []);
console.log(res);


0

如何将两个地址与peopleId 2进行映射

const persons = [{id:1, name: 'John'}, {id:2, name: 'Alice'}]

const addresses = [{id:1, peopleId: 1, address: 'Some street 1'}, {id:2, peopleId: 2, address: 'Some street 2'},{id:3, peopleId: 2, address: 'Some street 3'}]

const result = persons.map(person => {
  const addressItem = addresses.find(address => address.peopleId === person.id)
  
  person.address = addressItem 
  ? addressItem.address
  : null
  
  return person
})

console.log(result)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接