如何使用javascript在嵌套对象数组中按属性分配值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用javascript在嵌套对象数组中按属性分配值相关的知识,希望对你有一定的参考价值。
我想知道如何在javascript中通过id=insta
为嵌套对象中的对象属性赋值
我有两个对象,我需要使用javascript将一个对象属性应用于另一个
我卡住了,不知道怎么办,
obj1.forEach(e=> {if(e.id==='insta') Object.assign(e, obj2)})
var obj1 = [
{
id: "insta",
rate: "2.4",
fee: "0",
amount: "400"
},
{
id: "trans",
rate: "1.4",
fee: "0",
amount: "200"
}
]
var obj2 =
{
data: {
rate_value: "4.4",
fee_value: "10",
targetamount: "5000",
country_code: "SG"
}
}
Expected Output:
res= [
{
id: "insta",
rate: "4.4",
fee: "10",
amount: "5000",
country_code: "SG"
}
]
答案
我们可以使用reduce方法将数组减少到我们想要的结果。在这里,我在if
方法的回调中添加了obj2
条件和reduce
中的映射值。基本上,在reduce
回调方法中完成了过滤和映射。
var obj1 = [{
id: "insta",
rate: "2.4",
fee: "0",
amount: "400"
},
{
id: "trans",
rate: "1.4",
fee: "0",
amount: "200"
}
]
var obj2 = {
data: {
rate_value: "4.4",
fee_value: "10",
targetamount: "5000",
country_code: "SG"
}
}
const result = obj1.reduce((acc, curr) => {
if (curr.id === 'insta') {
acc.push({
...curr,
rate: obj2.data.rate_value,
fee: obj2.data.fee_value,
amount: obj2.data.targetamount,
country_code: obj2.data.country_code
})
}
return acc;
}, []);
console.log(result);
另一答案
正如您的预期输出所示,您只需要id="insta"
使用filter()
的项目来获取这些项目。然后使用map()
并在地图内创建一个临时对象。并使用Spread Operator返回组合对象。
注意:您需要创建另一个对象,因为obj2
和array中的属性名称不同。
var obj1 = [ { id: "insta", rate: "2.4", fee: "0", amount: "400" }, { id: "trans", rate: "1.4", fee: "0", amount: "200" }]
var obj2 = { data: { rate_value: "4.4", fee_value: "10", targetamount: "5000", country_code: "SG" } }
const res = obj1.filter(x => x.id === "insta").map(x => {
const {data} = obj2
let temp = {
rate : data.rate_value,
fee : data.fee_value,
amount : data.targetamount,
country_code : data.country_code
}
return {...x,...temp}
})
console.log(res)
另一答案
首先,您可以使用Array.filter将数组id = "insta"
包含对象,然后使用obj2
将Array.map中的数据应用于每个项目。
像这样的东西:
var obj1 = [{
id: 'insta',
rate: '2.4',
fee: '0',
amount: '400',
},
{
id: 'trans',
rate: '1.4',
fee: '0',
amount: '200',
},
];
var obj2 = {
data: {
rate_value: '4.4',
fee_value: '10',
targetamount: '5000',
country_code: 'SG',
},
};
const result = obj1
.filter(item => item.id === 'insta')
.map(item => ({
id: item.id,
rate: obj2.data.rate_value,
fee: obj2.data.fee_value,
amount: obj2.data.targetamount,
country_code: obj2.data.country_code,
}));
console.log(result)
以上是关于如何使用javascript在嵌套对象数组中按属性分配值的主要内容,如果未能解决你的问题,请参考以下文章