2015-06-14 110 views
0
function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

var family = [] 

var people = {alice:40, bob:42, michelle:8, timmy:6}; 


for (var key in people) { 
    family.push({key:people[key]}) 
} 

console.log(family); 

這不是給我的鑰匙。它爲每個鍵提供'鑰匙'。 在數組中添加{key:value}對象對的正確方法是什麼?在數組中添加鍵值對對

UPDATE 基於以下K3N的解決方案,這是我理解的作品最好的,如果我們從一個構造函數每次聲明:

keys = Object.keys(people); 
for (var i = 0; i < keys.length; i++) { 
    family.push(new Person(keys[i], people[keys[i]])); 
} 
+3

誰曾下跌票,指定你的理由,所以我可以添加任何信息,你正在尋找 – user2290820

+1

注意,對於-in循環是相當可觀的比正常的for-loop慢。 – K3N

+0

@ K3N謝謝,那會進一步優化。將確保。這個問題的答案是修復輸出,我沒有得到第一個 – user2290820

回答

4

由於您的人員數組包含人的姓名作爲關鍵字,並且值是年齡(小心如果您得到兩個同名的人在時間空間發生核反應......)。

你可以這樣說:

function Person (name, age) { 
 
    this.name = name; 
 
    this.age = age; 
 
} 
 

 
var family = [] 
 

 
var people = {alice:40, bob:42, michelle:8, timmy:6}; 
 

 
var keys = Object.keys(people);    // list all (ownProperty) keys in object 
 
for(var i = 0, key; key = keys[i]; i++) {  // loop through 
 
    family.push(new Person(key, people[key])); // push it 
 
} 
 

 
document.write(JSON.stringify(family));  // demo output

+1

這應該是正確的答案 – torox

+0

@torox它和另一個一樣好。我首先選擇了這一個。另一個是優雅的。但是像family.push(新人(key,people [key]));稍後做出。無論如何,我不想優化。 – user2290820

2

威瑟使用Bracket notation使密鑰可以被視爲變量屬性名

for (var key in people) { 
    var temp={}; 
    temp[key]=people[key] 
    family.push(temp) 
} 

或者Computed property name

for (var key in people) { 
    family.push({[key]:people[key]}) 
} 
+0

這不是有效的。我看到在每次迭代創建的var – user2290820

+1

@ user2290820已更新查看更改。 – bugwheels94

+0

這樣比較好。所以你在鍵盤上加入了一個支架。爲什麼這個工作? – user2290820