按属性映射对象数组

时间:2017-05-10 10:39:24

标签: javascript reactjs ecmascript-6

我有这个(说它的对象A)

[{grade:1},{grade:2},{grade:3}]直到100日。

如何将这些现有数据(称其为对象B)映射到它们中?

[
{grade:1,name:'alice',address:{poscode:123},tel:324}
{grade:5,name:'wonder',address:{poscode:123},tel:1234223},
{grade:90,name:'james',address:{poscode:234},tel:324}]
]

表示50级,它不匹配任何对象B,最终结果也应该具有名称和地址属性,为它们赋值null以使数组保持一致。如果我使用对象A循环,那么问题是如果对象B中还有其他属性?

2 个答案:

答案 0 :(得分:1)

如果我正确理解了问题,您可以使用对象A作为地图源,然后使用Object.assign从对象B复制单个属性以及添加一些默认值:



const objA = [{grade:1},{grade:2},{grade:3}];
const objB = [
{grade:1,name:'alice',address:{poscode:123},tel:324},
{grade:5,name:'wonder',address:{poscode:123},tel:1234223},
{grade:90,name:'james',address:{poscode:234},tel:324}
];
const objC = objA.map(rootObject => Object.assign(
    // A new object with some defaults
    { name: null, address: null, tel: null },
    // The source object from objA
    rootObject,
    // The data object from objB, if any
    objB.find(detail => detail.grade === rootObject.grade)
  )
);
console.log(objC);




答案 1 :(得分:0)

您可以使用方便的Array方法实现此目的。请参阅以下代码段:



const a = [
  {grade: 1},
  {grade: 2},
  {grade: 3},
  {grade: 4},
  {grade: 5},
  {grade: 90},
  {grade: 100}
];
const b = [
  {grade:1,name:'alice',address:{poscode:123},tel:324},
  {grade:5,name:'wonder',address:{poscode:123},tel:1234223},
  {grade:90,name:'james',address:{poscode:234},tel:324}
];

let result = a.map(aItem => {
  let match = b.find( bItem => aItem.grade === bItem.grade );
  if(!match){
    return Object.assign({}, aItem, { name: null, address: {}, tel: null });
  } else {
    return match;
  }
});
console.log(result);




相关问题