如何基于另一个键值向数组中的对象添加新的键值对



我有两个JSON对象:

obj1 = [{
"screenCode": "usr_ooo_master",
"screenName": "Out Of Office Master"
}, {
"screenCode": "usr_user_master",
"screenName": "User Master"
}]
obj2 = [{
"id": "10a310a8-6f01-4082-af86-bb73019cff8d",
"cascadeImpact": {
"screenCode": "usr_user_master",
"impactedModuleCode": "borrower2"
},
"screenImpactedCode": "bor_address1"
}, {
"id": "308c8058-5e98-4b99-a1c6-82e9e5c93787",
"cascadeImpact": {
"screenCode": "usr_ooo_master",
"impactedModuleCode": "borrower2"
},
"screenImpactedCode": "bor_address2"
}]

我想根据"screenCode"向obj2添加一个新的键值对。因此,例如,我想将"screenName":"UserMaster"添加到obj2的第一个元素中。我该怎么做。

您可以将相应的键/值对移动到Map,并使用map的结果更新对象。

var array1 = [{ screenCode: "usr_ooo_master", screenName: "Out Of Office Master" }, { screenCode: "usr_user_master", screenName: "User Master" }],
array2 = [{ id: "10a310a8-6f01-4082-af86-bb73019cff8d", cascadeImpact: { screenCode: "usr_user_master", impactedModuleCode: "borrower2" }, screenImpactedCode: "bor_address1" }, { id: "308c8058-5e98-4b99-a1c6-82e9e5c93787", cascadeImpact: { screenCode: "usr_ooo_master", impactedModuleCode: "borrower2" }, screenImpactedCode: "bor_address2" }],
map = new Map(array1.map(({ screenCode, screenName }) => [screenCode, screenName]));
array2.forEach(({ cascadeImpact }) =>
cascadeImpact.screenName = map.get(cascadeImpact.screenCode));
console.log(array2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

obj2['screenName'] = 'User Master'

我唯一有点怀疑的是,在obj2中,你有一个元素数组。如果以上方法不起作用,那么您可以像(JQuery版本):一样迭代obj2

$.each(obj2, function(index, element) {
element['screenName'] = 'User Master';
}

记住,数组中可能有1个元素-它只会迭代一次(但资源需求将比你像第一段代码中那样只进行赋值更大)

如果你想将密钥添加到特定项目,只需使用该项目的密钥:obj2[0][‘screenName’]="test",否则会出现以下循环:

obj2 = [{
"id": "10a310a8-6f01-4082-af86-bb73019cff8d",
"cascadeImpact": {
"screenCode": "usr_user_master",
"impactedModuleCode": "borrower2"
},
"screenImpactedCode": "bor_address1"
}, {
"id": "308c8058-5e98-4b99-a1c6-82e9e5c93787",
"cascadeImpact": {
"screenCode": "usr_ooo_master",
"impactedModuleCode": "borrower2"
},
"screenImpactedCode": "bor_address2"
}]
for(var i=0;i < obj2.length; i++){
obj2[i]['screenName'] = 'Master-' + (i+1);
obj2[i]['screenCode'] = 'Code-' + (i+1);
}
console.log(obj2)

最新更新