这是一个作业问题。我需要编写一个名为“ 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];
}
}
}
我想以阵列的形式获取给定艺术家的所有记录,但是我只能得到一个。我什至不对此感兴趣吗?
答案 0 :(得分:1)
主函数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!
}
答案 1 :(得分:1)
您可以将map
与filter
一起使用:
function allBy(artist) {
return collection.filter(({ artist: a }) => a == artist).map(({ title }) => title);
}