比较2个JavaScript对象并根据条件移动数据



我有一个名为syncWithPreviousDay的函数,它接收下面的对象数组作为属性。

jsonObj

[
{
"Position": "1",
"TrackName": "Rocket",
"URL": "https://domain.local/nbs678"
},
{
"Position": "2",
"TrackName": "Dueling banjos",
"URL": "https://domain.local/asd456"
},
{
"Position": "3",
"TrackName": "One hit wonder",
"URL": "https://domain.local/xyz123"
}
]

在这个函数中,我需要将密钥URL与数据库中具有相同密钥对的另一个对象数组进行比较,只要有匹配,就将密钥PositionCustomKey移动到data.chart数组中的新密钥PreviousPositionCustomKey。如果不匹配,请为两个键创建一个null值。

const syncWithPreviousDay = (jsonObj) => {
const data = {
date: config.dateToday,
chart: jsonObj
}
dbService.getDate(config.yesterday)
.then( result => {
console.log(result.chart)
})
}

console.log的结果如下:

[
{
"Position": "1",
"TrackName": "One hit wonder",
"URL": "https://domain.local/xyz123",
"CustomKey": "x"
},
{
"Position": "2",
"TrackName": "Awesome old song",
"URL": "https://domain.local/123qwe",
"CustomKey": "y"
},
{
"Position": "3",
"TrackName": "Dueling banjos",
"URL": "https://domain.local/asd456",
"CustomKey": null
}
]

所以我想要的data.chart应该是这样的:

[
{
"Position": "1",
"TrackName": "Rocket",
"URL": "https://domain.local/nbs678",
"PreviousPosition": null,
"CustomKey": null
},
{
"Position": "2",
"TrackName": "Dueling banjos",
"URL": "https://domain.local/asd456",
"PreviousPosition": "3",
"CustomKey": null
},
{
"Position": "3",
"TrackName": "One hit wonder",
"URL": "https://domain.local/xyz123",
"PreviousPosition": "1",
"CustomKey": "x"
}
]

如何做到这一点?

您可以简单地通过迭代一个循环并匹配数据库数组中是否存在特定元素来实现。如果存在值,则添加所需的值,否则添加空值。

我已经为您提供了逻辑,您可以在函数内部或任何需要的地方使用它。

const localArr = [
{
"Position": "1",
"TrackName": "Rocket",
"URL": "https://domain.local/nbs678"
},
{
"Position": "2",
"TrackName": "Dueling banjos",
"URL": "https://domain.local/asd456"
},
{
"Position": "3",
"TrackName": "One hit wonder",
"URL": "https://domain.local/xyz123"
}
];
const dbArray = [
{
"Position": "1",
"TrackName": "One hit wonder",
"URL": "https://domain.local/xyz123",
"CustomKey": "x"
},
{
"Position": "2",
"TrackName": "Awesome old song",
"URL": "https://domain.local/123qwe",
"CustomKey": "y"
},
{
"Position": "3",
"TrackName": "Dueling banjos",
"URL": "https://domain.local/asd456",
"CustomKey": null
}
];
for (const element of localArr) {
const index = dbArray.findIndex(item => item.URL === element.URL);
if (index !== -1) {
element.PreviousPosition = dbArray[index].Position;
element.CustomKey = dbArray[index].CustomKey;
} else {
element.PreviousPosition = null;
element.CustomKey = null;
}
}
console.log(localArr)

假设您的对象是obj1和obj2:

obj1.map(function (item_1) {
obj2 = obj2.map(function (item_2) {
if(item_1.URL == item_2.URL){
item_2['PreviousPosition']=item_1['Position'];
item_2['CustomKey']=item_1['CustomKey'];
}else{
item_2['PreviousPosition']=null;
item_2['CustomKey']=null;
}
return item_2
});
});

最新更新