在Javascript中多次将数组添加到数组中

时间:2014-09-24 05:04:28

标签: javascript jquery arrays object

我想将对象的副本放入 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的骰子卷将从“普通”阵列中挑选敌人。最好的方法是什么?

我确信有一种令人尴尬的简单方法,所以我提前道歉。 :)

2 个答案:

答案 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];