我在Nodejs上遇到问题,我需要在item.IS_RACING === 1
外观
_.map(recordsets, function(items) {
return _.map(items, function(item) {
if (item.IS_RACING === 1) {
_this.getRacing();
}
});
});
每次条件为_this.getRacing();
时,我都会调用true
,但如果有IS_RACING === 1
的项目,那么函数_this.getRacing();
将是打电话20次。我需要一些类似的功能,一旦应用检测到第一个IS_RACING === 1
出现的时间,然后只触发_this.getRacing();
一次。
任何建议?
答案 0 :(得分:6)
正如Pointy
在评论中指出(抱歉),您真的不想使用map()
来执行此操作。
根据您如何向其他开发人员解释问题来思考问题。
如果任何记录集中有一个竞赛项目,我想致电
getRacing()
。
现在,编写代表你意图的代码。
var somethingIsRacing = _.some(recordsets, function(items) {
return _.some(items, function(item) {
return item.IS_RACING === 1;
});
});
if(somethingIsRacing) {
_this.getRacing();
}
此代码遵循一个称为命令查询分离的原则,您首先使用功能编程样式查询所需信息,然后执行具有副作用的操作命令式编程风格。
答案 1 :(得分:0)
标志变量通常可以解决问题:
var getRacingCalled = false;
_.map(recordsets, function(items) {
return _.map(items, function(item) {
if (item.IS_RACING === 1 && !getRacingCalled) {
_this.getRacing();
getRacingCalled = true;
}
});
});
答案 2 :(得分:0)
尝试用闭包来做:
var closure = (function() {
var fired = false;
return function (item) {
if (!fired && item.IS_RACING === 1) {
fired = true;
_this.getRacing();
}
};
})();
_.map(recordsets, function(items) {
return _.map(items, closure(item));
});