Сравните 2 JavaScript объектов и переместите данные в зависимости от условий - PullRequest
0 голосов
/ 30 марта 2020

У меня есть функция с именем 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 с другим массивом объектов из моей базы данных, который имеет те же пары ключей и где есть совпадение, переместите ключи Position и CustomKey на новый ключ PreviousPosition и CustomKey в data.chart массив. Если совпадений нет, создайте значение 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"
    }
]

Как это можно сделать?

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Вы можете просто сделать это путем итерации al oop и сопоставления, если конкретный элемент существует в массиве базы данных или нет. Если значения существуют, то добавьте обязательные значения, иначе добавьте нулевые значения.

Я предоставил вам логи c, вы можете использовать его внутри функции или в любом месте, где вам нужно.

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)
0 голосов
/ 30 марта 2020

Предполагая, что ваши объекты - 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
                });
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...