Возврат нескольких значений из массива - PullRequest
0 голосов
/ 02 мая 2019

Это домашнее задание. Мне нужно написать функцию allBy, которая принимает аргумент (artist) в качестве аргумента.
При запуске эта функция должна возвращать массив всех записей в «коллекции», принадлежащих данному исполнителю.

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

Журналы консоли - это функция, которая добавляет запись в коллекцию.

 let collection = [];

 function addToCollection( title, artist, year) {
   collection.push({title, artist, year}); // adds album to array
   return {title, artist, year};  // returns newly created object
 } // end of addToCollection function     


 console.log( addToCollection('The Real Thing', 'Faith No More', 
 1989));
 console.log( addToCollection('Angel Dust', 'Faith No More', 
 1992));
 console.log( addToCollection( 'Nevermind', 'Nirvana', 1991));
 console.log( addToCollection( 'Vulgar Display of Power', 
 'Pantera', 1991));

 function allBy(artist) {
   for ( let i = 0; i < collection.length; i++) {
   // for ( disc of collection) {
       if (collection[i].artist === artist) {
         return [collection[i].title];
       }
     }
 }

Я хочу получить все записи данного исполнителя в виде массива, но я могу получить только одну. Я даже близко к этому?

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Вы можете просто использовать map с filter:

function allBy(artist) {
    return collection.filter(({ artist: a }) => a == artist).map(({ title }) => title);
}
1 голос
/ 02 мая 2019

Основная функция, allBy(), возвращается, как только видит первого подходящего исполнителя.Попробуйте объявить пустой массив и сохранить найденные в нем совпадения, чтобы вы могли вернуть массив вне цикла.

function allBy(artist) {

   var matches = []; // create an empty array to store our matches

   for ( let i = 0; i < collection.length; i++) {
       // console.log('current collection item: ', collection[i]); // optional: log or add a breakpoint here to understand what's happening on each iteration
       if (collection[i].artist === artist) {
         matches.push(collection[i].title); // add a match we've found
         // return [collection[i].title];
       }
   }

   return matches; // tada!
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...