【发布时间】:2019-09-14 21:32:01
【问题描述】:
我很难找到“合并”两个 JSON 对象的解决方案。我找不到任何有帮助的答案。我有两个对象并想比较它们,如果匹配,则将属性作为标记添加到第一个对象。这是一个例子:
小提琴: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 对象的“列表”中,并创建第三个output 对象与(相同长度)firstInput 的副本。但是这次添加了属性"status": "SAVED" 如果"id": "44" 存在于 secondInput 中为"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++;
});
有谁知道如何使用纯香草 JS 获得所需的输出? - 注意:该列表有 100 多个索引。速度至关重要。
【问题讨论】:
-
从技术上讲,JSON 是指您序列化了一个 javascript 对象。因此,您使用的是 javascript 对象,而不是 json。
标签: javascript arrays json object nativescript