简体   繁体   English

如何将此代码更改为不同的格式? (Javascript)

[英]How would I change this code to a different format? (Javascript)

The code below is the code that I have written:下面的代码是我写的代码:

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;
}

The code that I want to look similar to the function singer(artist) code is this:我希望看起来类似于 function 歌手(艺术家)代码的代码是这样的:

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;
}

I am unfamiliar with this type of format in Javascript, how would I change it so that const genreCount will look like function singer(artist).我不熟悉 Javascript 中的这种格式,我将如何更改它以使 constgenreCount 看起来像 function 歌手(艺术家)。

this style is called functional programming这种风格称为函数式编程

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

here is a good interactive tutorial if you are interested Functional Programming in Javascript如果您对Javascript 中的函数式编程感兴趣,这里是一个很好的交互式教程

UPDATE: oops, sorry for misunderstanding your questions here is genreCount rewritten with for-loop:更新:哎呀,很抱歉在这里误解了您的问题是用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;
}

This is what you will get if you want to change that function:如果您想更改 function,这就是您将得到的:

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;
}

or (if you want to assign that fucntion to a const anyway):或(如果您想将该功能分配给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;
}

You just should replace arrow functins with the regular function expressions .您只需将arrow functins替换为regular function expressions But I don't know why do you need that.但我不知道你为什么需要那个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM