2014-04-07 78 views
-3

例如:陣列字符串以JSON對象的數組

var array = ['a','a','b','b','c','c','c','c','d','d','d','d','d','d']; 

var ans = array.reduce(function(acc,curr){ 
    if(typeof acc[curr] == 'undefined') { 
     acc[curr] = 1; 
    } else { 
     acc[curr] += 1; 
    } 

    return acc; 
}, {}); 

會給我:

ans = {'a':'2','b':'2','c':'4','d':'6'} 

但我的目標是得到它以這種格式

ans = [{'word':'a','count':'2'},{'word':'b','count':'2'},{'word':'c','count':'4'},{'word':'d','count':'6'}] 

任何幫助,將不勝感激。

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – megawac

+1

@megawac OP已經使用'Array.prototype.reduce' – Phil

+1

他有語法在他的片段中他們可以自己弄清楚的錯誤 – megawac

回答

1

你已經有一個簡潔的數據格式,但是,如果你必須將其轉換爲更詳細的版本,嘗試

var wordCount = []; 
Object.keys(ans).forEach(function(word) { 
    wordCount.push({ 
     word: word, 
     count: ans[word] 
    }); 
}); 

如果你想要的所有功能於一身的解決方案,試試這個...

var array = ['a','a','b','b','c','c','c','c','d','d','d','d','d','d']; 

var ans = array.map(function(word) { 
    return { word: word, count: 1 }; 
}).reduce(function(p, c) { 
    for (var i = 0, l = p.length; i < l; i++) { 
     if (p[i].word === c.word) { 
      p[i].count += c.count; 
      return p; 
     } 
    } 
    p.push(c); 
    return p; 
}, []);