2017-06-02 44 views
1

我是JavaScript新手,所以我一直在试图找到更多的方法来理解它。我一直在以两种方式创建代码。 For循环和更高阶的函数使用数组方法,如reduce,map,filter等。 我将发布数组,缩减代码和for循环。任何人都可以看到我是否正确地执行for循环?JavaScript为循环和减少。这是否正确

var people = [ 
{ name: "Jesse", age: 32, gender: "male" }, 
{ name: "Tommi", age: 40, gender: "female" }, 
{ name: "John", age: 19, gender: "male" }, 
{ name: "Toni", age: 50, gender: "trans" }, 
{ name: "Gene", age: 19, gender: "trans" }, 
{ name: "Freddy", age: 80, gender: "male" } 

];

我知道这个方法是正确的

var reduceGenderSum = people.reduce(function(obj, person){ 
if(!obj[person.gender]){ 
    obj[person.gender] = 1; 
} else { 
    obj[person.gender] += 1; 
} 
return obj; 
}, {}) 

但我不太确定使用循环这种方式,但对我来说任何人都可以仔细检查。

function genderSumFn(){ 
var count = 0; 
var count2 = 0; 
var count3 = 0; 
for(var i = 0; i < people.length; i ++){ 
    if(people[i].gender === 'male'){ 
     count ++; 
    } else if(people[i].gender === 'female'){ 
     count2 ++ 
    } else { 
     count3 ++ 
    } 
} 
return { male: count, female: count2, trans: count3 }; 
} 

我得到相同的输出。我只是想确保使用for循环正确执行它。

+0

您的代码完美的作品。 –

+0

是的,你的代码是正确的。 –

+0

谢谢你们!我太高兴了!我一直很喜欢使用减少,我开始努力转换使用for循环! –

回答

0

对于for循环而言,如同回调reduce一样,您可以使用一个对象。

function getGenderCount(people) { 
 
    var count = {}, 
 
     i; 
 

 
    for (i = 0; i < people.length; i++) { 
 
     count[people[i].gender] = count[people[i].gender] || 0; 
 
     count[people[i].gender]++; 
 
    } 
 
    return count; 
 
} 
 

 
var people = [{ name: "Jesse", age: 32, gender: "male" }, { name: "Tommi", age: 40, gender: "female" }, { name: "John", age: 19, gender: "male" }, { name: "Toni", age: 50, gender: "trans" }, { name: "Gene", age: 19, gender: "trans" }, { name: "Freddy", age: 80, gender: "male" }]; 
 

 
console.log(getGenderCount(people));