返回实例'for循环中的id

return instances' id inside a for loop

本文关键字:循环 id for 实例 返回      更新时间:2024-04-19

我有以下内容:

function Bee(name, id, lifespan, hitPoints) {
    this.name = name;
    this.id = id;
    this.lifespan = lifespan;
    this.hitPoints = hitPoints;
    Bee.numInstances = (Bee.numInstances || 0) + 1;
    return this;
}

内部文件准备好了:

$(document).ready(function(){
    var BEE = BEE || {};
    BEE.QueenBee = new Bee('QueenBee', 1, 100, 8);
    BEE.WorkerBee = new Bee('WorkerBee1', 2, 75, 12);
    BEE.WorkerBee = new Bee('WorkerBee2', 2, 75, 12);
    BEE.WorkerBee = new Bee('WorkerBee3', 2, 75, 12);
    BEE.WorkerBee = new Bee('WorkerBee4', 2, 75, 12);
    BEE.WorkerBee = new Bee('WorkerBee5', 2, 75, 12);
    BEE.DroneBee = new Bee('DroneBee1', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee2', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee3', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee4', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee5', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee6', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee7', 3, 50, 12);
    BEE.DroneBee = new Bee('DroneBee8', 3, 50, 12);
    //$('button').on('click', ba);
    for(i = 0; i < Bee.numInstances; i++){
        console.log(Bee.id === 2);
    };
});

我的console.log返回14 false。我想检查/阻止循环,只返回ID为2的每个实例,因此"Bee.ID===2"

要继续蜜蜂主题,您可以创建一个蜂箱,在其中添加蜜蜂,并根据它们的id返回蜜蜂。

function Hive() {}
Hive.prototype.bees = [];
Hive.prototype.addBee = function (bee) {
  this.bees.push(bee);
};
Hive.prototype.getBeeIds = function (id) {
  if (!id) return this.bees;
  return this.bees.filter(function (bee) {
    return bee.id === id;
  });
}
var hive = new Hive();

添加蜜蜂:

hive.addBee(new Bee('WorkerBee1', 2, 75, 12));
hive.addBee(new Bee('DroneBee1', 3, 50, 12));

要检索具有特定id的蜜蜂,请使用id参数调用getBeeIds

hive.getBeeIds(2);

要检索所有蜜蜂,请调用不带id参数的getBeeIds

hive.getBeeIds();

演示

首先,您试图将多个对象分配给对象的一个键。这是行不通的。您应该使用对象数组。为了筛选出正确的,我建议使用Array.filter()函数:

$(document).ready(function(){
    var BEES = [];
    BEES.push(new Bee('WorkerBee1',2,75,12);
    BEES.push(new Bee('WorkerBee2',2,75,12);
    BEES.push(new Bee('WorkerBee3',2,75,12);
    var selectedBees = BEES.filter(function(bee){
       return bee.id == 2;
    });
    console.log(selectedBees); //Should log Array of all 3 bees
});

map函数接受一个回调函数,该函数为要筛选的数组的每个条目调用。如果某个项的函数返回true,它将被推送到最终的selectedBees数组中。如果错误,则不会发生任何事情。

编辑

我用地图代替了过滤器。地图的工作原理不同,只是看到了错误并修复了它!