2017-05-16 69 views
0
var status = ['Inprocess', 'Hired', 'Rejected', 'Inprocess']; 
var count = []; 
for (var i = 0; i < status.length ; i++) { 
    if(count[status[i]]){ 
    count[status[i]]++; 
    } else { 
    count[status[i]] = 1; 
    } 
} 

我有一個數組狀態,我試圖計數狀態值的出現並在count數組中獲得結果。使用jquery計算數組的發生次數

我得到的結果爲:

count = ["Inprocess" : 2, "Hired" : 1, "Rejected" : 1] 

而我想要的結果是:

count = [2,1,1] 

請幫助。

+0

爲什麼第一個數據結構不夠好?第二個看起來沒有意義,除非你知道單詞的順序是什麼。另外,你的例子是否正確? (reject = 3?) – Chris

+0

我同意,第二個數據結構沒有意義,因爲它取決於原始數組的順序。 –

+0

*「using jquery」* - 您目前不使用jQuery,也不需要它。至少需要將當前輸出作爲中間工作步驟(儘管您應該使用對象而不是數組),但正如您已經指出的那樣,您希望的輸出已經很難實際使用。無論如何,您可以映射您現有的值以獲得一個普通數組:'count = Object.keys(count).map(v => count [v])'。 – nnnnnn

回答

0

對於一個window.statuswindow的財產,對於兩個人來說,您似乎將Array表示法與您的Object表示法混淆。當陣列中只有一個這樣的項目時,我也不知道爲什麼你會得到'拒絕:3'。我建議將你的代碼包裝在一個函數中,以便'status'變量具有局部範圍(或者更好的是,將它作爲參數傳遞給函數),然後使用散列表來計算每個數組元素的出現次數,並最終通過該對象運行以將計數結果作爲數組返回。喜歡的東西...

function statusCount(status) { 
    var count = {}; 

    status.forEach(function(s) { 
     count[s] = count[s] ? ++count[s] : 1; 
    }); 
    //count = {Inprocess: 2, Hired: 1, Rejected: 1} 

    return Object.keys(count).map(function(c) { 
     return count[c]; 
    }); 
} 

var sCount = statusCount(['Inprocess', 'Hired', 'Rejected', 'Inprocess']); 
console.log(sCount); 
//=> Array [ 2, 1, 1 ] 

傳遞的「狀態」數組作爲參數傳遞給函數將允許你重用功能和時間。

輸出似乎很隨機的,本身就給人些許端倪什麼值實際上涉及到 - 但希望的例子會給你一個方法的一些想法數組中的元素計數的實例。

+0

爲什麼不'Object.keys(count).map(c => count [c])'? – nnnnnn

+0

可能想要向OP注意到您使用的是ES6表示法,除非他使用預處理器,否則這不會起作用? –

+1

@RickCalder ES6在最新的Firefox中工作,但你是對的 - 我會填寫一下。 –