如何将此代码更改为其他格式? (JavaScript)

时间:2019-11-13 05:43:25

标签: javascript

下面的代码是我编写的代码:

function singer(artist) {
    var songs = [];
    for(var i = 0; i < music.length;i++ ){
        if(music[i].artist.indexOf(artist) > -1) {
            songs.push(music[i].name);
        }
    }
    return songs;
}

我想要看起来类似于功能歌手(歌手)代码的代码是:

const genreCount = () => {
    const genres =  music.reduce((result, cur) => {
        cur.genres.forEach(g => {
            if (result.hasOwnProperty(g)) {
                result[g] += 1;
            }
            else
                result[g] = 1;
        });

        return result;
    }, {});
    return genres;
}

我不熟悉Javascript中的这种格式,我将如何更改它以便const genreCount看起来像函数singer(artist)。

2 个答案:

答案 0 :(得分:0)

这种风格称为函数式编程

const singer = artist => music.filter(m => artist.indexOf(m.artist) > -1).map(m => m.name)

如果您有兴趣,这里有一个很好的互动教程 Functional Programming in Javascript

更新: 抱歉,您误解了您的问题 这是用for循环重写的genreCount:

function genreCount(){
  const genres = {};
  for(var i=0; i<music.length; i++){
    var g = music[i]
    if (genres.hasOwnProperty(g)) {
      genres[g] += 1;
    }
    else{
      genres[g] = 1;
    }
  }
  return genres;
}

答案 1 :(得分:0)

如果要更改该功能,将获得以下内容:

function genreCount() {
    const genres =  music.reduce(function(result, cur) {
        cur.genres.forEach(function(g) {
            if (result.hasOwnProperty(g)) {
                result[g] += 1;
            }
            else
                result[g] = 1;
        });

        return result;
    }, {});
    return genres;
}

或(如果您仍然希望将此功能分配给const):

const genreCount = function() {
    const genres =  music.reduce(function(result, cur) {
        cur.genres.forEach(function(g) {
            if (result.hasOwnProperty(g)) {
                result[g] += 1;
            }
            else
                result[g] = 1;
        });

        return result;
    }, {});
    return genres;
}

您只需将arrow functins替换为regular function expressions。但是我不知道你为什么需要它。