2016-01-20 139 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/ –