将JavaScript JSON对象与匹配参数合并
我很难找到“合并”两个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
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使用我拥有的这个阵列来实现,对我来说这看起来更复杂。但谢谢你的主意。