2014-09-24 36 views
0

我想要把對象的拷貝到一個數組ň次,其中ñ是每個這些對象的屬性數量,告訴你如何很多時候它需要被複制。添加對象的數量成倍數組n個在Javascript

所以我想我應該做一個循環,併爲每個對象,看看它的屬性和循環循環,整數的次數。

var myArray = {}; 
var object1 = { 
    "copyMeThisManyTimes": 4, 
    "name": "Sam" 
} 
var object2 = { 
    "copyMeThisManyTimes": 2, 
    "name": "Max" 
} 
for (i=0; i < this.copyMeThisManyTimes; i++) { 
    myArray.push(this); 
} 

也許這for迴路應在每一個$或東西,所以有一個範圍,「這」是根據?

背景故事:在我編碼的遊戲中,一些生物對象比其他生物更爲罕見。我想創造一個敵人牌的「甲板」。某些敵人應該比其他敵人多出現 - 認爲它們是「常見的」。每個對象都有一個稀缺性屬性 - 該整數將決定該對象的重複次數將被放入數組中的次數,以確保常見的更頻繁出現。我認爲這將是一個很好的方法來做稀有,但我完全開放其他選項通過JavaScript或jQuery(更喜歡香草js)。

朋友提到的另一種選擇是爲每個「稀有」類別設置一個單獨的數組,併爲敵人選擇一個隨機數字,這些數字中的更多數字將指向「公共」數組,而更少指向「稀有「陣列。例如1-4的骰子會從「普通」陣列中挑選一個敵人。什麼是最好的方法來做到這一點?

我確信有一個令人尷尬的更簡單的方法,所以我提前道歉。 :)

回答

1

你的邏輯沒有什麼不對。只是一些實現問題。

var myArray = []; // array literal, not object 
 
var object1 = { 
 
    "copyMeThisManyTimes": 4, // was missing a quote 
 
    "name": "Sam" 
 
} 
 
var object2 = { 
 
    "copyMeThisManyTimes": 2, // also 
 
    "name": "Max" 
 
} 
 
for (i=0; i < object1.copyMeThisManyTimes; i++) { // can't use this, need to specify an object 
 
    myArray.push(object1.name); // push the value you want 
 
} 
 
for (i=0; i < object2.copyMeThisManyTimes; i++) { // again for the second object 
 
    myArray.push(object2.name); 
 
} 
 
document.write(JSON.stringify(myArray));

如果你有大量的對象,它可能是最好將它們放置在一個數組,遍歷這一點。

var myArray = []; 
 
var arrayOfObjects = [{ 
 
    "copyMeThisManyTimes": 4, 
 
    "name": "Sam" 
 
}, { 
 
    "copyMeThisManyTimes": 2, // also 
 
    "name": "Max" 
 
}]; 
 
for (i=0; i < arrayOfObjects.length; i++) { 
 
    for (j=0; j < arrayOfObjects[i].copyMeThisManyTimes; j++) { 
 
     myArray.push(arrayOfObjects[i].name); 
 
    } 
 
} 
 
document.write(JSON.stringify(myArray));

+0

有趣的解決方案,我正在查看它。感謝您在發佈後儘快回覆! – SpaceNinja 2014-09-24 13:01:00

1

爲了避免對象重疊,可以有2個陣列:

  • 一種含各種對象
  • 另一個含有對象的索引中的一個實例根據 選擇骰子卷

例如,如果對象數組的第一項是普通對象,則第二個數組中的第一個值將爲0,因此1-4的骰子卷將選擇共同的敵人。

只有索引會被複制,而不是對象。

var enemies = [ 
    { 
     name: "max" 
    }, 
    { 
     name: "sam" 
    } 
] 
// a dice roll of 1-4 will return "max", a dice roll of 5-6 will return "sam" 
var rarity = [0, 0, 0, 0, 1, 1]; 
selectedIndex = rarity[Math.floor(Math.random() * rarity.length)]; 
selectedEnemy = enemies[selectedIndex]; 
+0

哦,這是一個好方法。我正在查看它。 – SpaceNinja 2014-09-24 13:01:27