2013-04-02 63 views
0

我想複製數組中的3個對象,直到總共有50個對象。我該如何去做這件事?如何在數組中創建重複對象

var listings = [ 
    { 
     address: "123 41st St", 
     bedrooms: 2, 
     bathrooms: 2, 
     image: "img/1bdrm_a.jpg" 
    }, 
    { 
     address: "234 52nd St", 
     bedrooms: 1, 
     bathrooms: 1, 
     image: "img/1bdrm_b.jpg" 
    }, 
    { 
     address: "345 63rd St", 
     bedrooms: 3, 
     bathrooms: 2, 
     image: "img/1bdrm_c.jpg" 
    } 
]; 
+0

您是否試圖自行解決方案?你卡在哪裏? –

+1

http://jsfiddle.net/DerekL/CCfWK/ –

+0

你是否想要一個淺拷貝(即如果'listing [0] .address'被改變,你也會在'listings [2] .address'中看到變化),或深層複製(即所有元素無關)。 – kay

回答

2

您可以使用方法like this對每個項目進行深層複製(克隆)。我們可以避免使用%這個解決方案,因爲它最終不會起任何作用。

jsFiddle

var i = 0; 
while (listings.length < 50) { 
    listings[listings.length] = clone(listings[i++]); 
} 
console.log(listings); 


//https://stackoverflow.com/a/122190/1156119 
function clone(obj){ 
    if(obj == null || typeof(obj) != 'object') 
     return obj; 

    var temp = obj.constructor(); // changed 

    for(var key in obj) 
     temp[key] = clone(obj[key]); 
    return temp; 
} 
4

這個循環應該做的伎倆:

for (var i = 3; i < 50; i++) { 
    listings[i] = listings[i%3]; 
} 

神奇的是在模塊化運算符(%)。 i可以遞增到任何您需要的數量,但i%3將按該順序繼續返回0,1和2。

+0

儘管這只是引用了相同的對象,但並不複製它們。 –

+0

感謝您的回覆,%如何工作?我在哪裏可以找到關於這方面的信息,只是想知道這是如何工作的,謝謝 – user1644644

+0

@ user1644644:http://en.wikipedia.org/wiki/Modular_arithmetic –

0
while(listings.length <= 50){ 
    listings[listings.length] = listings[listings.length - 3] 
} 

我更喜歡while循環for for循環來做這樣的事情。

+0

列表長度將至少匹配3次,作爲undefined。不是很乾淨:) – 2013-04-02 23:11:45

+0

從列表長度3開始,如在原始帖子中,列表長度何時會返回爲未定義?雖然模數運算符會從列表的開頭拉動正確的項目的方式會更好一些。 – ckersch

0
var listings = [ 
    { 
     address: "123 41st St", 
     bedrooms: 2, 
     bathrooms: 2, 
     image: "img/1bdrm_a.jpg" 
    }, 
    { 
     address: "234 52nd St", 
     bedrooms: 1, 
     bathrooms: 1, 
     image: "img/1bdrm_b.jpg" 
    }, 
    { 
     address: "345 63rd St", 
     bedrooms: 3, 
     bathrooms: 2, 
     image: "img/1bdrm_c.jpg" 
    } 
]; 
var len=listings.length; 
for(var i=0;i<listings.length;i++){ 
    for(var j=i;j<50;j+=len){ 
     listings[j]=listings[i]; 
    } 
}