这是我尝试替换的循环的基本JavaScript:
for (var i=0; i<tickers.length; i++) {
if (tickers[i].ticker === selectedTicker) {
selectTicker('portfolio', tickers[i]);
break;
}
}
以下是lodash版本
_.times((tickers.length), function() {
if (tickers[i].ticker === selectedTicker) {
selectTicker('portfolio', tickers[i]);
return;
}
});
显然目前这个错误,因为在lodash版本中没有设置[i]
变量。
lodash版本的可读性更高,只是我的代码阵列长度的很多倍。
但是我需要将每个对象的股票代码与selectedTicker
进行比较。
更新:添加屏幕截图和链接以向某些人询问_lodash是否比原生Javascript更快。
答案 0 :(得分:2)
您可以使用_.find()
var ticker = _.find(tickers, {'ticker': selectedTicker});
// `find()` returns an object if the element is found in array
// it returns `undefined` if not found
if (ticker) {
// If element found in the array call the function
selectTicker('portfolio', ticker);
// return; // To return from the function
}
答案 1 :(得分:1)
您必须在函数中添加一个参数:
_.times((tickers.length), function( i ) {
if (tickers[i].ticker === selectedTicker) {
selectTicker('portfolio', tickers[i]);
return;
}
});
答案 2 :(得分:1)
您需要将i
传递给lodash函数中的回调。这应该有效:
_.times((tickers.length), function(i) {
if (tickers[i].ticker === selectedTicker) {
selectTicker('portfolio', tickers[i]);
return;
}
});
此外,如果您能够使用es6语法,则可以使用filter
var ticker = tickers.filter(t => t.ticker === selectedTicker)[0];
if(ticker){
selectTicker('portfolio', ticker);
}