我有这个(说它的对象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中还有其他属性?
答案 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);