Прямо сейчас есть несколько элементов с одинаковым заголовком, поэтому сравнение на основе заголовка не сработает.
Другая проблема заключается в том, что ваш скребок, похоже, возвращает элементы с несовместимой структурой. У некоторых есть внутренний объект item {}, а у других его нет. Вы должны убедиться, что скребок постоянно возвращает объекты, прежде чем делать что-то еще.
{
"date": 1596285977851,
"item": { <--- open: this extra level is not in all the objects
"price": "140,00",
"title": "Shirt"
} <-- close
}
Если бы элементы имели уникальные заголовки, работало бы следующее:
const yesterday = {
"items": [
{
"date": 1596131220030,
"price": 150,
"title": "Jumper"
},
{
"date": 1596285977851,
"price": 120,
"title": "Jumper"
},
{
"date": 1596131220030,
"price": 150,
"title": "Shirt1"
},
{
"date": 1596285977851,
"price": 140,
"title": "Shirt2"
}
]
}
const today = {
"items": [
{
"date": 1596131220030,
"price": 165,
"title": "Jumper"
},
{
"date": 1596285977851,
"price": 130,
"title": "Jumper"
},
{
"date": 1596131220030,
"price": 155,
"title": "Shirt1"
},
{
"date": 1596285977851,
"price": 130,
"title": "Shirt2"
}
]
}
for (todaysItem of today.items) {
const matchingItems = yesterday.items.filter((yesterdaysItem) => yesterdaysItem.title === todaysItem.title)
if (matchingItems.length !== 1) {
console.log(matchingItems.length, "matches found for", matchingItems[0].title, "skipping")
continue;
}
const yesterdaysItem = matchingItems[0]
const priceDifference = (todaysItem.price - yesterdaysItem.price);
let message = '';
if(priceDifference > 0){
message = `The price has increased by €${priceDifference} since yesterday`;
}
if(priceDifference < 0){
message = `The price has decreased by €${Math.abs(priceDifference)} since yesterday`;
}
if(priceDifference === 0){
message = `The price has not changed since yesterday`;
}
console.log(yesterdaysItem.title,":", message)
}
То, что я делаю, - это зацикливаю массив элементов с сегодняшнего дня и фильтрую элементы вчерашнего дня на основе точно совпадающего заголовка (вы могли бы очистить идентификатор лучше, чем заглавие). Если совпадений слишком много или их нет, мы пропускаем этот пункт. В случае совпадения рассчитываем разницу в цене и печатаем. (Для ясности я пропустил предварительную обработку)
Общее решение см .: Получение разницы двух json -объектов