2016-01-20 141 views
0

我在JavaScript中有這樣的對象的數組:對象的集合添加鍵在JavaScript

[ 
    {A:10}, 
    {B:20}, 
    {C:30} 
] 

我想這個轉換爲對象的數組會出現這樣(一起工作d3.js):

[ 
    {word: "A", weight: 10}, 
    {word: "B", weight: 20}, 
    {word: "C", weight: 30} 
] 

我能夠獲得對象的初始陣列通過簡單地做:

var wordData = []; 
for (var i = 0; i < words.length; i++) { 
    if (wordData.hasOwnProperty(words[i])) { 
     wordData[words[i]] += 1; 
    } else { 
     wordData[words[i]] = 1; 
    } 
} 

這只是設置一個簡單的散列,但不會在每個散列之前添加鍵。

編輯

JSFiddle爲簡單起見。

+0

你需要迭代兩次。 – Satpal

+1

但{A,10}'看起來不像一個有效的javascript,它應該是'{A:10}'。 – nicael

+0

已更正,thankyou @nicael – mariocatch

回答

3
var wordData = [ 
    {A: 10}, 
    {B: 20}, 
    {C: 30} 
]; 

var result = wordData.map(function (item) { 
    var key = Object.keys(item)[0]; 
    return {word: key, weight: item[key]}; 
}); 
+0

這可能是答案,但我無法讓它工作。我不明白爲什麼當我在本地測試時,我的源集合「wordData」長度爲1。我用一個新的編輯更新了我的問題,該編輯顯示了Chrome檢查器顯示的內容。這可能是因爲我創建'wordData'對象的方式。編輯3是最新的編輯。 – mariocatch

+1

@mariocatch而不是一個截圖,你可能想要發佈'JSON.stringify(wordData,null,2)'的輸出......' – Tomalak

+0

'[null]'是那個lol的輸出。 – mariocatch

1

請嘗試以下代碼。我已經嘗試過for循環。

var wordData =[ 
{A: 10}, 
{B: 20}, 
{C: 30} 
]; 

var results = []; 
for (var prop in wordData) {      
    var key = Object.keys(wordData[prop])[0]; 
    result = {word: key, weight: wordData[prop][key]}; 
    results.push(result); 
} 

var json_result = JSON.stringify(results, null, 2); 
console.log(json_result); 

輸出

[ 
    { 
    "word": "A", 
    "weight": 10 
    }, 
    { 
    "word": "B", 
    "weight": 20 
    }, 
    { 
    "word": "C", 
    "weight": 30 
    } 
] 

var json_result = JSON.stringify(results); // without null 
console.log(json_result); 

輸出

[{"word":"A","weight":10},{"word":"B","weight":20},{"word":"C","weight":30}] 

<div id="data"> 
    Run the code below 
</div> 

var wordData = {}; // Edit, use {} intead of [] here. 
for (var i = 0; i < words.length; i++) { 
    // The problem is definitely in this loop. 
    if (wordData.hasOwnProperty(words[i])) { 
    wordData[words[i]] += 1; 
    } else { 
    wordData[words[i]] = 1; 
    } 
} 

var results = []; 
for (var prop in wordData) { 
    result = {word: prop, weight: wordData[prop]}; 
    results.push(result); 
} 
var json_result = JSON.stringify(results, null, 2); 
document.getElementById('data').innerHTML = json_result; 

Demo

+0

我已經在這裏複製你的代碼:https://jsfiddle.net/mariocatch/peayr88z/5/ 它在這個例子中提供了數組中的空對象。 – mariocatch

+1

我已根據您的要求編輯我的代碼。 https://jsfiddle.net/peayr88z/8/ –