有人能解释一下如何正确编写这个Javascript函数吗?

有人能解释一下如何正确编写这个Javascript函数吗?,javascript,arrays,loops,Javascript,Arrays,Loops,我在找人告诉我哪里出错了。说明如下: 编写以下函数(使用歌曲数组确定要返回的内容)。 getSongsNamesByArtist-此函数需要一个字符串作为参数 并返回一个数组,该数组仅包含中那些歌曲的名称 艺术家属性等于字符串的歌曲数组 这是传递给它的 所以我这样做了: let songs = []; function createSong(name, artist) { let song = { name: name, artist: artist

我在找人告诉我哪里出错了。说明如下:

编写以下函数(使用歌曲数组确定要返回的内容)。 getSongsNamesByArtist-此函数需要一个字符串作为参数 并返回一个数组,该数组仅包含中那些歌曲的名称 艺术家属性等于字符串的歌曲数组 这是传递给它的

所以我这样做了:

let songs = [];
function createSong(name, artist) {
    let song = {
        name: name,
        artist: artist
    }
    songs.push(song);

    return song;
}
              
var heroes = new createSong("Heroes", "Bowie");
var jubileeStreet = new createSong("Jubilee Street", "Nick Cave");
var buena = new createSong("Buena", "Morphine");
var changes = new createSong("Changes", "Bowie");
var belaLugosi = new createSong("Bela Lugosi is Dead", "Bauhaus");



// I could get only this far:

function getSongsNamesByArtist(artist) {
  let names = [];
  for (let i = 0; i < songs.length; i++) {
    let song = songs[i];
    if (song.artist === artist) {
      names.push(song.name);
      return names;
    }
  }
}


console.log(getSongsNamesByArtist("Bowie")) // returns: [ 'Heroes' ], but not both of them.
let songs=[];
函数createSong(名称、艺术家){
让歌曲={
姓名:姓名,,
艺人:艺人
}
歌曲。推(歌曲);
返回歌曲;
}
var HEROLES=新创作歌曲(“英雄”、“鲍伊”);
var jubileeStreet=新创作歌曲(“朱比利街”、“尼克洞”);
var buena=新创作歌曲(“buena”,“吗啡”);
var changes=新的createSong(“变更”、“Bowie”);
var belaLugosi=新创作歌曲(“Bela Lugosi死了”,“包豪斯”);
//我只能走这么远:
函数getSongsNamesByArtist(艺术家){
让名称=[];
for(设i=0;i
你能告诉我哪里出了错吗?
谢谢你的时间

找到第一个匹配项后,您将立即返回。你必须在外面做循环。更新你的方法如下

let songs=[];
函数createSong(名称、艺术家){
让歌曲={
姓名:姓名,,
艺人:艺人
}
歌曲。推(歌曲);
返回歌曲;
}
var HEROLES=新创作歌曲(“英雄”、“鲍伊”);
var jubileeStreet=新创作歌曲(“朱比利街”、“尼克洞”);
var buena=新创作歌曲(“buena”,“吗啡”);
var changes=新的createSong(“变更”、“Bowie”);
var belaLugosi=新创作歌曲(“Bela Lugosi死了”,“包豪斯”);
//我只能走这么远:
函数getSongsNamesByArtist(艺术家){
让名称=[];
for(设i=0;ilog(getSongsNamesByArtist(“Bowie”))
问题是您在if语句中提前返回。因此,一旦找到匹配项,就返回结果

function getSongsNamesByArtist(artist) {
  let names = [];
  for (let i = 0; i < songs.length; i++) {
    let song = songs[i];
    if (song.artist === artist) {
      names.push(song.name);
      return names; // <- here is your problem
    }
  }
}

谢谢你找到它!不用担心:)@meadow,你介意把答案标记为已解决吗?谢谢你看一下!如果你同意这个答案,我希望你不会介意投票并接受它,以获得更好的可视性
function getSongsNamesByArtist(artist) {
  let names = [];
  for (let i = 0; i < songs.length; i++) {
    let song = songs[i];
    if (song.artist === artist) {
      names.push(song.name);
    }
  }

  return names; // <- here is where you should return
}
function getSongsNamesByArtist(artist) {
  return songs.filter((song) => {
    
    // Filter out the artist you are looking for
    return song.artist === artist;
  }).map((song) => {

    // Reformat your output to only contain the name of the song
    return song.name; 
  });
}