下面的代码是我编写的代码:
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)。
答案 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
。但是我不知道你为什么需要它。