强调每个方法都不返回值

时间:2012-02-29 23:18:43

标签: underscore.js

不确定为什么这不起作用。不应该返回索引并且循环停止。 我只需要返回第一个值为true的索引,然后不返回任何其他值

var index = _.each([false, true, true],function(flag, index){
    if(flag){ return index }
});

3 个答案:

答案 0 :(得分:4)

无论你返回什么内容,

_.each都会为数组中的每个元素调用迭代器函数。我认为_.indexOf正是您所寻找的。

var index = _.indexOf([false, true, true], true);

答案 1 :(得分:2)

_.each只是一个迭代器,不会返回索引。要使用它来查找您正在尝试执行的索引,您可能希望执行以下操作:

var trueIndex = -1;

_.each([false, true, true],function(flag, index){
  if (trueIndex < 0 && flag) { 
    trueIndex = index;
  }
});

if (trueIndex != -1) {
  alert(trueIndex);
}

但是,使用while循环可能更容易:

var flags = [false, true, true]
var f, index = 0;

while(f = flags[index++]) {
  if (f) break;    
}

alert (index);

答案 2 :(得分:0)

indexOf只返回一个你需要的值:) 但是......如果你需要所有这些,你可以使用带过滤器的地图:D也许有一个更简单的解决方案......

_(_.map([false, true, true], function(obj, index){ if(obj)return index; })).filter(function(num, index){return num != undefined});

这将返回一个数组:[1,2]