我正在尝试执行一些JSON函数,在这里我需要比较array1和array2中的对象,如下所示,并将缺少的对象附加到array2或完全创建一个newArray1。
这是示例
const array1 = [
{
"document_id":"ABC123",
"document_title":"How to solve a Status",
},
{
"document_id":"ABC678",
"document_title":"Make it Status two",
},
{
"document_id":"ABC678",
"document_title":"Make it Status two",
}
];
const array2 = [
{
"article_id":"ABC123",
"rank":0
},
{
"article_id":"ABC678",
"rank":1
}
]
const resultOutput = [{
"article_id":"ABC123",
"rank":0,
"title":"How to solve a Status",
},
{
"article_id":"ABC678",
"rank":1,
"title":"Make it Status two",
}]
答案 0 :(得分:0)
您可以使用嵌套的for这样的循环...
const resultOutput = [];
for(let i = 0; i < array2.length; i++) {
let currentObj = array2[$i];
for(let j = 0; j < array1.length; j++) {
if(currentObj.article_id === array1[j].document_id) {
let tempObj = {
"article_id": currentObj.article_id,
"rank": currentObj.rank,
"title": array1[j].document_title
};
resultOutput.push(tempObj);
}
}
}
答案 1 :(得分:0)
这是一种方法。 (代码段下方的详细说明。)
const array1 = [
{
"document_id":"ABC123",
"document_title":"How to solve a Status",
},
{
"document_id":"ABC678",
"document_title":"Make it Status two",
},
{
"document_id":"ABC678",
"document_title":"Make it Status two",
}
];
const array2 = [
{
"article_id":"ABC123",
"rank":0
},
{
"article_id":"ABC678",
"rank":1
}
];
const mergedMap = ([...array1, ...array2])
.reduce(
(acc, {document_id, article_id = document_id, ...others}) => {
acc[article_id] = {...(acc[article_id] || {article_id}), ...others};
return acc;
},
{}
);
console.log(Object.values(mergedMap));
使用array1和array2中的所有条目创建一个新数组。
[...array1, ...array2]
在合并的数组上运行Array.reduce
。
[...array1, ...array2].reduce(
// function,
// initial value
)
Array.reduce
的第一个参数是为数组中的每个项目调用的函数。它有4个参数,但我们只关心前两个:
我们在第二个参数(当前数组条目)上使用object destructuring syntax来获取article_id
,并将其默认设置为document_id
,并将其余项的属性捕获为{ {1}}。
others
将当前项目的属性合并到其(acc, {document_id, article_id = document_id, ...others}) => {
的累加器条目中,并根据需要通过article_id
创建该条目:
{article_id}
为下一次迭代返回更新的累加器:
acc[article_id] = {...(acc[article_id] || {article_id}), ...others};
该reduce调用的最终结果将是return acc;
到合并对象的映射:
article_id
我们不再关心该对象中的键,因此我们将值提取为数组:
{
ABC123: {
article_id: 'ABC123',
rank: 0,
title: 'How to solve a Status',
},
ABC678: {
article_id: 'ABC678',
document_title: 'Make it Status two',
rank: 1
}
}
哪个获取了我们的对象数组:
Object.values(mergedMap);