简体   繁体   English

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

[英]How to add new key value pair to an object in an array based on another key-value

I have 2 JSON objects: 我有2个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"
}]

I want to add a new key-value pair to obj2 depending on the "screenCode". 我想根据“ screenCode”向obj2添加一个新的键值对。 So eg. 因此,例如。 I want to add "screenName": "User Master" to obj2 first element. 我要向obj2第一个元素添加“ screenName”:“ User Master”。 How do I do that. 我怎么做。

You could move the corresponding key/values pairs to a Map and update the object with the result of the map . 您可以将对应的键/值对移动到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'

The only thing I a little but doubt is within obj2 you have single-element array. 我唯一有点怀疑的是,在obj2中,您具有单元素数组。 If the above won't work, you can always iterate on obj2 like (JQuery version): 如果上述方法不起作用,则始终可以像(JQuery版本)一样在obj2上进行迭代:

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

Having in mind you olny have 1 element in the array - it will iterate only once (but the resource hunger will be larger than if you just do the assignment like in the first code) 请记住,您在数组中只有1个元素-它只会迭代一次(但是资源饥饿会比您仅像第一个代码那样进行赋值更大)

if u want to add key to specific item just use key of that item: obj2[0]['screenName'] = "test" otherwise there is loop down below: 如果您想将密钥添加到特定项目,只需使用该项目的密钥: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) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM