簡體   English   中英

如何在基本lodash循環內比較數組中的特定項目

[英]How to compare specific items in array inside of basic lodash loop

這是我要替換的基本JavaScript for循環:

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版本的imho更具可讀性,只需將我的代碼數組的長度做很多倍即可。

但是,我需要將每個對象的代碼與selectedTicker進行比較。


更新:添加了屏幕快照和鏈接以證明某些人要求_lodash比本地Javascript更快。

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

在此處輸入圖片說明

在此處輸入圖片說明

您可以使用_.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
}

您必須在函數中添加一個參數:

_.times((tickers.length), function( i ) {
    if (tickers[i].ticker === selectedTicker) {
        selectTicker('portfolio', tickers[i]);
        return;
    }
});

您需要將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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM