2016-06-29 8 views
1

使用Javascript,你將如何去遍歷數組,然後 將結果存儲到單個對象或變量中?我知道我可以很容易地編寫單獨的函數來完成這個任務,但是如果我需要在單個函數中完成這個任務呢?如何迭代數組並將結果存儲在單個對象或變量中?

此代碼做我想要的,但顯然是重複的。你將如何幹起這段代碼並將結果返回到一個變量中?

var groupIds = ['G8372', 'G895', 'G12030']; 

var groupOne = this.state.groups.find(g => g.get('extId') === groupIds[0]); 
var groupTwo = this.state.groups.find(g => g.get('extId') === groupIds[1]); 
var groupThree = this.state.groups.find(g => g.get('extId') === groupIds[2]); 

var groupOneMembers = groupOne.get('members') 
    .filter(member => member.get('role') === 'member'); 
var groupTwoMembers = groupTwo.get('members') 
    .filter(member => member.get('role') === 'member'); 
var groupThreeMembers = groupThree.get('members') 
    .filter(member => member.get('role') === 'member'); 

var totalMembers = groupOneMembers.size + groupTwoMembers.size + groupThreeMembers.size; 

return totalMembers; 
+0

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Loops_and_iteration – juvian

+0

如果您只想查找總成員,那麼爲什麼要將他們分爲不同的組?爲什麼不只在'groupAll'或'this.state.groups'上應用過濾器? –

+0

這是完全奇怪的代碼。爲什麼你定義了三個函數'groupOne','groupTwo'和'groupThree',如果它們只有一個索引值不同?這同樣適用於'groupXXXMembers'。 – ftor

回答

1

像這樣:

let total = 0; 
for (let gid of ['G8372', 'G895', 'G12030']) { 
    total += 
     this.state.groups.find(g => g.get('extId') === gid) 
     .get('members').filter(member => member.get('role') === 'member') 
     .size; 
} 
return total; 
+0

這正是我所期待的!謝謝。 'for'語句處理所有的計算,而不必分配'total'以外的任何變量。 – mdunkle

0
var groupIds = ['G8372', 'G895', 'G12030']; 
return this.state.groups.select(function(group){ 
    return (groupIds.includes(group.extId) && group.role ==='member') 
}).length 

不是100%肯定的讓你的數據雖然。

相關問題