簡體   English   中英

查找是否已經存在,JS和Lodash

[英]Find if already exists, JS and Lodash

所以我有一個有趣的問題,我不確定該如何遵循,我需要使用lodash搜索對象中的兩個數組,以查看x是否已經存在,讓我們來看看輸出的控制台:

在此處輸入圖片說明

我感興趣的有兩個鍵: questChainssingleQuests ,我想用lodash編寫兩個單獨的函數:在questChains questChainID等於x的對象數組中找到id x。

第二個函數會說:我找對象的數組中的一個任務,其中singleQuests questTitle等於ÿ

因此,如果我們舉一個例子,您可以看到questChainId1因此,如果我將1傳遞給上述函數,我將返回true ,而實際上我並不關心該對象的自身,否則我將得到false。

對於singleQuests ,如果我傳入hello (不區分大小寫),我會恢復為true因為有一個帶有questTitle為“ Hello”的任務。 再次,我不在乎該對象返回。

我寫這個的方式是這樣的:

_.find(theArray, function(questObject){
    _.find(questObject.questChains, function(questChain){
         if (questChain.questChainId === 1) {
             return true;
         }
    });
});

這僅用於任務鏈ID比較。 這看起來超級混亂,為什么呢? 因為我嵌套lodash查找,所以我也嵌套if。 它有點難以閱讀。

這是唯一的方法嗎? 或者,還有更好的方法?

是的,它可以更簡單地表達。

嘗試這樣的事情:

 var exampleArray = [{ questChains: [{ questChainId: 1, name: 'foo' }, { questChainId: 2, name: 'bar' }], singleQuests: [{ questTitle: 'hello world' }] }, { questChains: [{ questChainId: 77, name: 'kappa' }] }]; var result = _.chain(exampleArray) .pluck('questChains') .flatten() .findWhere({ questChainId: 2 }) .value(); console.log('result', result); 
 <script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script> 

使用chainvalue是可選的。 它們只是讓您更簡潔地將多個lodash方法鏈接在一起。

pluck從數組中的每個對象獲取一個屬性,然后返回這些屬性的新數組。

flatten采用嵌套數組結構並將其flatten平為平面數組結構。

findWhere將返回與提供的屬性名稱/值匹配的第一個元素。

所有這些結果我們取所有的組合questChain陣列從exampleArray ,壓扁成一個單一的陣列,其可根據被更容易地重復,然后執行用於所期望的值的搜索。

不區分大小寫的匹配將更具挑戰性。 您可能需要用接受匹配功能的方法(即find )替換findWhere ,或者提前清理輸入內容。 無論哪種方式,您都需要在名稱上調用toLowertoUpper或某些變體來標准化搜索。

暫無
暫無

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

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