我想将对象的副本放入 n 数组中,其中 n 是每个对象的属性,告诉你它需要多少次被复制。
所以我想我应该做一个循环,并且对于每个对象,查看它的属性并循环循环整数的次数。
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
循环应该在$ each或者某个东西中,所以有一个“this”基于的范围?
背景故事:在我正在编码的游戏中,有些生物对象比其他生物对象更罕见。我想创造一个敌人牌的“套牌”。某些敌人应该比其他人更频繁地出现 - 认为它们是“常见的”。每个对象都有一个稀有属性 - 这个整数将决定该对象的重复项放入数组的次数,以确保更频繁地看到常见的对象。我认为这将是一个很好的方式来做稀有,但我完全接受通过Javascript或jQuery(更喜欢vanilla js)的其他选项。
朋友提到的另一个选择是为每个“稀有”类别设置一个单独的数组,并为敌人选择选择一个随机数,这些数字中的更多数字将指向“常见”数组,而更少的指向“稀有” “阵列。例如,1-4的骰子卷将从“普通”阵列中挑选敌人。最好的方法是什么?
我确信有一种令人尴尬的简单方法,所以我提前道歉。 :)
答案 0 :(得分: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));
答案 1 :(得分:1)
为避免对象重复,您可以拥有2个数组:
例如,如果对象数组的第一项是常用项,则第二个数组中的4个第一个值将为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];