【发布时间】:2020-04-12 08:39:56
【问题描述】:
我正在尝试从DATA 收集所有对象并与schemesFromPOI 进行比较。如果名称是 AMERICAN_EXPRESS,我只想在 scheme 对象中将其更改为 AMEX,保留 DATA 对象。
const DATA =
[
{
"name": "MASTERCARD",
"id": "MASTERCARD123"
},
{
"name": "VISA",
"id": "VISA456"
},
{
"name": "AMERICAN_EXPRESS",
"id": "AMEX789"
}
];
const schemesFromPOI = [
{ dpaId: 'DPA1', name: 'MASTERCARD' },
{ dpaId: 'DPA2', name: 'VISA' },
{ name: 'AMERICAN_EXPRESS' }
];
let config = [];
schemesFromPOI.forEach(function (schemeFromPOI) {
let scheme = DATA.find(function (element) { return element.name === schemeFromPOI.name; });
if(scheme) {
if (scheme.name === "AMERICAN_EXPRESS") {
console.log("Before updating scheme.name property: ", DATA);
scheme.name = 'AMEX';
console.log("After updating scheme.name property: ", DATA);
}
config.push(scheme);
}
});
但是,当我更改 scheme.name 时,DATA 对象也会更新。以下是上述控制台输出的结果:
Before updating scheme.name property: "[{'name':'MASTERCARD','id':'MASTERCARD123'},{'name':'VISA','id':'VISA456'},{'name':'AMERICAN_EXPRESS','id':'AMEX789'}]"
After updating scheme.name property: "[{'name':'MASTERCARD','id':'MASTERCARD123'},{'name':'VISA','id':'VISA456'},{'name':'AMEX','id':'AMEX789'}]"
显然DATA 对象正在更新,而不仅仅是scheme 对象。为什么会发生这种强制?和.find()方法有关系吗?
【问题讨论】:
标签: javascript arrays javascript-objects