Проверка значения Obj Id перед отправкой в ​​массив - PullRequest
1 голос
/ 07 октября 2019

У меня есть два массива объектов. Мне нужно перенести объекты из одного массива в другой, но мне нужно проверить obj Id, прежде чем я это сделаю. Если идентификатор уже находится в основном массиве (songDatabase), есть ли способ увеличить obj Id вместо перезаписи или дублирования идентификаторов?

Вот код, который у меня пока есть:

onst songDatabase = [{ songId: 1, title: 'Drive', artist: 'The Cars', },
                     { songId: 2, title: 'When Doves Cry', artist: 'Prince', },
                     { songId: 3, title: 'Butterfly', artist: 'Crazy Town', },
                     { songId: 4, title: 'The Way I Are', artist: 'Timbaland', },];

const songList = [{ songId: 5, title: 'Save a prayer', artist: 'Duran Duran', },
                  { songId: 1, title: 'Sunday Blood Sunday', artist: 'U2', }]; 

function checkSongId(songIdCheck) { 
  for (let i = 0; i < songDatabase.length; i++){  
    songIdCheck = songDatabase[i].songId; //read the songId from songDb
    console.log(songIdCheck); //log each songId
  }
    if(songIdCheck === getNewSong(songList.songId)) { //check if the songId is already on the songDatabase
      songIdCheck =+ songIdCheck;
    } else {
      songDatabase.push(songList); 
    }
    // console.log('song already on the DB');
  return; 
}

function getNewSong(songId, title, artist) {
    for (let x = 0; x < songList.length; x++ ) {
  songId = songList[x].songId;
  title = songList[x].title;
  artist = songList[x].artist;  
}
  return {songId, title, artist}; //only returns the last songList Object
}

console.log(checkSongId());
console.log(getNewSong());

Я надеялся увидеть все песни в базе данных песен с уникальными идентификаторами, но я не могу заставить его работать. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Более простой подход может состоять в том, чтобы фильтровать новый массив только для песен, которых еще нет в старом массиве песен, и объединять два массива. Вы также можете написать его обратно в oldSongArray, если это необходимо

let oldSongArray; //existing db
let newSongArray; //new db

let updatedSongArray = oldSongArray.concat(newSongArray.filter(_song => !oldSongArray.find(song => song.songId === _song.songId)))

// oldSongArray = updatedSongArray;
0 голосов
/ 07 октября 2019

В строке, где вы пытаетесь увеличить Id songIdCheck =+ songIdCheck; Измените =+ на +=. Вот как вы правильно увеличиваете значение.

И в вашей второй функции вы возвращаете один объект. Какой последний объект в цикле. Чтобы показать все объекты, вы можете создать массив и помещать объект каждый раз, когда выполняете цикл следующим образом:

function getNewSong(songId, title, artist) {
let arr = []; 
    for (let x = 0; x < songList.length; x++ ) {
  songId = songList[x].songId;
  title = songList[x].title;
  artist = songList[x].artist; 

  arr.push({songId, title, artist}); 
}
  return arr; //only returns the last songList Object
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...