2017-06-02 48 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));