[英]Find if already exists, JS and Lodash
所以我有一個有趣的問題,我不確定該如何遵循,我需要使用lodash搜索對象中的兩個數組,以查看x是否已經存在,讓我們來看看輸出的控制台:
我感興趣的有兩個鍵: questChains
和singleQuests
,我想用lodash編寫兩個單獨的函數:在questChains
questChainID
等於x的對象數組中找到id x。
第二個函數會說:我找對象的數組中的一個任務,其中singleQuests
questTitle
等於ÿ
因此,如果我們舉一個例子,您可以看到questChainId
為1
因此,如果我將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>
使用chain
和value
是可選的。 它們只是讓您更簡潔地將多個lodash方法鏈接在一起。
pluck
從數組中的每個對象獲取一個屬性,然后返回這些屬性的新數組。
flatten
采用嵌套數組結構並將其flatten
平為平面數組結構。
findWhere
將返回與提供的屬性名稱/值匹配的第一個元素。
所有這些結果我們取所有的組合questChain
陣列從exampleArray
,壓扁成一個單一的陣列,其可根據被更容易地重復,然后執行用於所期望的值的搜索。
不區分大小寫的匹配將更具挑戰性。 您可能需要用接受匹配功能的方法(即find
)替換findWhere
,或者提前清理輸入內容。 無論哪種方式,您都需要在名稱上調用toLower
, toUpper
或某些變體來標准化搜索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.