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

将JavaScript JSON对象与匹配参数合并,javascript,arrays,json,object,nativescript,Javascript,Arrays,Json,Object,Nativescript,我很难找到“合并”两个JSON对象的解决方案。我找不到任何有帮助的答案。我有两个对象,想要比较它们,如果有匹配项,将属性作为标记添加到第一个对象。以下是一个例子: 小提琴: 第一个输入对象: var firstInput = [{ "id": "43", "published": "yes", "publish_date": "20.08.2019" }, { "id": "44", "pu

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

小提琴:

第一个输入对象:

    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"
    }]  
第二个输入对象:

    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"
    }]  
我想检查
“id”:“44”
来自
firstInput
对象是否存在于
secondInput
对象的“列表”中,并创建第三个
output
对象的副本(相同长度)
firstInput
。但这次添加了属性
“status”:“SAVED”
如果
“id”:“44”
作为
“id\u artikla”:“44”
存在于secondInput中

如果没有匹配项,我想添加属性
“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++;
            });

有人知道如何使用纯香草JS获得所需的输出吗注意:该列表的索引长度超过100个。速度至关重要

您是否尝试过使用
Array.prototype.find()
?这应该是一个解决办法

如果两个列表都很大,您可能希望避免嵌套循环,将第一个列表中的每个项目与第二个列表中的每个项目进行比较,因为这相当于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'}));

从技术上讲,JSON就是序列化javascript对象的时候。因此,您使用的是javascript对象,而不是json。感谢各位的回复。我现在就试试这个,让你知道它是怎么回事。更新:此解决方案非常有效。现在当我仔细看的时候,它确实更有意义了。感谢您的帮助,cheers@Meriton使用我拥有的这个阵列来实现,对我来说这看起来更复杂。但谢谢你的主意。