2014-09-24 64 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