2017-04-19 115 views
0

我试图找到一个lodash办法做到这一点替换:while循环与lodash

var start = 0; 
while (rows[start].substring(0, 1) === "#") { 
    start++; 
} 

的实际代码跳过所有顶级行,直到它没有找到一个#开头。我希望有,我可以做类似

var start = _.someMethod(function (str) { 
    return str.substring(0, 1) === "#" 
}) 

所以基本上一个lodash方法来查找不符合某些查询的第一个索引更好一点lodash方法。这是否存在?

+0

注意,如果所有的行以#开头的代码书面将抛出。 –

+0

总的来说,这是一个简化的版本,但谢谢指出,以防万一:) –

回答

4

有一个恰当的名字_.findIndex()

var rows = [ "#zero", "#one", "#two", "three", "#four" ]; 
 

 
var index = _.findIndex(rows, function (str) { 
 
    return str.charAt(0) !== "#"; 
 
}); 
 

 
console.log(index); // 3
<script src="https://cdn.jsdelivr.net/lodash/4.12.0/lodash.min.js"></script>

0

您可以编写一个特定的函数,这是lodash非常擅长的。

var rows = ['#zero', '#one', '#two', 'three', '#four']; 
 
var startsWithHash = _.ary(_.partialRight(_.startsWith, '#'), 1); 
 
var notStartsWithHash = _.negate(startsWithHash); 
 
var findIndexNotStartsWithHash = _.ary(_.partialRight(_.findIndex, notStartsWithHash), 1); 
 
var index = findIndexNotStartsWithHash(rows); 
 
console.log(index); // 3
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>