2014-02-21 92 views
1

我有幾個陣列,存儲的信息從一個簡單的形式使一個對象了幾個陣列

var name = [a, b, c, ...]; var last = [x, y, z, ...]; var age = [1, 2, 3];

現在,它的理念是,當窗體一個新填充,從而將新元素添加到陣列中,一個新的對象被創建持有此人的信息等 :

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

var object1 = new Person(name[1],last[1],age[1]); 

很顯然,我不想手動創建每當一個新的對象,所以我想有些事情要與實現for循環,但是這是如何爲對象(i)生成新名稱的?

我對JavaScript很陌生,可能我是在推翻一些東西,並且是在臉上直視我的答案,但我真的可以在這裏使用一些幫助。 非常感謝!

+0

只是存儲在數組中所得'Person'對象;)。 – kapa

+0

如果數組的大小不一樣,那麼人數將等於數組數量最少的數組的長度?這可以假設嗎? –

回答

0

版本略有不同,從p.s.w.g這是很好的反正,假設每場總是充滿(每個數組大小相同)。使用Underscore.jszipmapobject

var persons = []; 

for (var i = 0; i < names.length; i++) 
    persons.push(new Person(names[i], lasts[i], ages[i])); 
3

怎麼是這樣的:

var len = Math.min(name.length, last.length, age.length), 
    objects = new Array(len); 
for (var i = 0; i < len; i++) 
    objects[i] = new Person(name[i], last[i], age[i]); 

Demonstration

+0

'objects = []'就足夠了,而不是'objects = new Array(len)'。 – kapa

+0

@kapa是正確的,但我相信設置一個初始容量稍微有效一些。 –

+0

@pswg [取決於瀏覽器](http://jsperf.com/big-array-initialize/2),AFAIK。而微觀優化是邪惡的;)。但我總是準備好學習。 – kapa

0

一個襯裏:

var people = _.map(_.zip(names, lasts, ages), function(p) { return _.object(['name','last','age'], p); }); 
+0

**注意**:如果你是JS的新手,但不是一般的編程,我強烈建議使用Underscore。此外,如果您沒有Underscore或希望看到'_.object()'的實現,請查看http://stackoverflow.com/a/14399998/2882550 –

+0

**此外**:this可以是有趣的:http://stackoverflow.com/questions/1117916/merge-keys-array-and-values-array-into-an-object-in-javascript –