如何比较基本lodash循环内的数组中的特定项

时间:2016-02-12 17:21:12

标签: javascript arrays lodash

这是我尝试替换的循环的基本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更快。

http://jsperf.com/forloop-vs-each-from-lodash

enter image description here

enter image description here

3 个答案:

答案 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);
}