gpt4 book ai didi

javascript - 将 JavaScript JSON 对象与匹配的参数合并

转载 作者:行者123 更新时间:2023-11-29 16:30:52 25 4
gpt4 key购买 nike

我在寻找“合并”两个 JSON 对象的解决方案时遇到困难。我找不到任何有帮助的答案。我有两个对象,想要比较它们,如果存在匹配,则将属性作为标记添加到第一个对象。这是一个例子:

fiddle :https://jsfiddle.net/aunzyfcj/

第一个输入对象:

    var firstInput = [{
"id": "43",
"published": "yes",
"publish_date": "20.08.2019"

}, {
"id": "44",
"published": "yes",
"publish_date": "20.08.2019"
}]

第二个输入对象:

    var secondInput = [{
"id": 92,
"id_artikla": "140"
}, {
"id": 93,
"id_artikla": "139"
}, {
"id": 94,
"id_artikla": "44"
}, {
"id": 95,
"id_artikla": "10"
}, {
"id": 96,
"id_artikla": "12"
}, {
"id": 97,
"id_artikla": "22"
}, {
"id": 98,
"id_artikla": "9"
}]

我想检查 firstInput 对象中的 "id": "44" 是否存在于 secondInput 对象的“列表”中,并且使用(相同长度)firstInput 的副本创建第三个 output 对象。但这次添加了属性 "status": "SAVED" 如果 "id": "44" 在第二个输入中存在 "id_artikla": "44".

如果没有匹配,我想添加属性"status": "SAVE_ME"。请查看下面的输出示例。

输出对象:

     var output =  [{
"id": "43",
"published": "yes",
"publish_date": "20.08.2019",
"status": "SAVE_ME"
}, {
"id": "44",
"published": "yes",
"publish_date": "20.08.2019",
"status": "SAVED"
}]

我尝试使用下面的代码,但它没有给我所需的输出。它只添加一个匹配的 id。

            let i = 0;
firstInput.forEach( function( item ) {
var artikal = item.id;
secondInput.forEach( function( data ) {
if(artikal === data.id_artikla){
firstInput[i].status = "SAVED";
} else {
firstInput[i].status = "SAVE_ME";
}
});
i++;
});

有谁知道如何使用纯 Vanilla JS 获得所需的输出? - 注意:列表有 100 多个索引长。速度至关重要。

最佳答案

如果两个列表都很大,您可能希望避免将第一个列表中的每个项目与第二个列表中的每个项目进行比较的嵌套循环,因为这相当于 O(n^2) 比较。

相反,我会将 secondList 转换为支持通过 id 进行高效查找的数据结构:

const articleSaved = {};
for (const item of secondInput) {
articleSaved[item.id_artikla] = true;
}
for (const item of firstInput) {
item.status = articleSaved[item.id] ? 'SAVED' : 'SAVE_ME';
}

请注意,这会修改现有对象。如果你想要新的对象,你可以这样做

const result = firstInput.map(item => Object.assign({}, item, {status: saved[item.id] ? 'SAVED' : 'SAVE_ME'}));

关于javascript - 将 JavaScript JSON 对象与匹配的参数合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57939410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com