【问题标题】:Iterating through a filtered list returns undefined遍历过滤列表返回未定义
【发布时间】:2017-05-05 15:36:35
【问题描述】:

有人可以解释为什么harvesters[i] 在这种情况下会返回undefined 吗?我之前使用过类似的代码,没有任何问题。这是给游戏 Screeps 的。

  var harvesters=_(Game.creeps).filter( { memory: { role: 'harvester' } } );

  for(var i in harvesters)
  {
    //console.log(harvesters[i]); //this is the debug code I mention below
    harvesters[i].memory.sourceid=0;
  }
}

经过一些测试(感谢 cmets)我发现 harvesters[i] 没有返回我期望的收割机对象....每个 harvester 显然是

的一个实例
function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

当我尝试将其输出到控制台时。为什么这不是蠕变物体?

【问题讨论】:

  • .filter()不应该用函数调用吗?
  • @Pointy 是的,一个决定保留哪些函数的谓词。我希望这会返回一个错误。
  • Game.creeps 返回游戏中所有小兵的列表,过滤器为role: 'harvester'。对吗?
  • 同意一个array过滤器需要一个闭包或者函数句柄,但是这是_( ... )的返回值的过滤器方法,大概是下划线框架。我认为这意味着它是一个集合上的过滤器,它可能会起作用。但是,如果不知道使用的框架,就很难说。

标签: javascript screeps


【解决方案1】:

您当前正在使用 lodash 的链式序列功能,为了提取展开的值,您需要调用 .value()

您的代码必须看起来像这样:

const harvesters = _(Game.creeps).filter(
  {
    memory: {
      role: 'harvester'
    }
  }
).value();

您也可以直接使用_.filter

const harvesters = _.filter(Game.creeps, {
  memory: {
    role: 'harvester'
  }
});

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 2021-10-23
    • 2016-01-09
    • 2015-11-25
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多