2014-01-22 11 views
24

我有一個變量selectedSubTopicId,我有一個subTopic對象的數組:objectiveDetail.subTopics[]。每個subTopic對象subTopicId可以_lodash測試一個數組來檢查一個數組元素是否有一個具有特定值的字段?

我想用這個來啓用或禁用,並添加主題按鈕。我可以在ng-disabled中使用lodash來測試此陣列,並且如果陣列的任何subTopic對象元素的subTopicId等於selectedSubTopicId,則返回true。

下面是一個在objectiveDetail中的數據示例。在這種情況下,subTopics數組中只有一個元素。

{"objectiveDetailId":285, 
"objectiveId":29, 
"number":1, 
"text":"x", 
"subTopics":[{"subTopicId":1, 
       "number":1}] 
} 

下面是thefourtheye建議在我的角度控制器代碼:

$scope.checkDuplicateSubTopicId = function (objectiveDetail, sSubTopic) { 
     if (_.some(objectiveDetail.subTopics, function(currentTopic) { 
      return _.contains(currentTopic, selectedSubTopicId); 
     })) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

我與點擊功能按鈕未顯示如下所示:

<button data-ng-disabled="checkDuplicateSubTopicId(objectiveDetail, subTopicId)"> 
     Add Topic 
    </button> 

的問題是,它的不太工作,按鈕不顯示禁用。

+1

是的,你可以(提示:http://lodash.com/docs#some)。 –

回答

43

你沒有問如何做到這一點,但我以爲這是你想知道什麼。

正如我已經提到的,您可以使用_.some,它將遍歷數組中的每個元素並執行回調。在該回調可以測試主題​​的屬性的值是否等於變量的值:

var result = _.some(objectiveDetail.subTopics, function (topic) { 
    return topic.subTopicId === selectedSubTopicId; 
}); 

_.some將跳過剩餘的元素,如果它發現一個其回調返回true

+0

謝謝!這應該是'_.includes'或'_.exists'的別名。 –

2

您可以使用_.some方法,這樣

var _ = require("lodash"); 

var objectiveDetail = {"objectiveDetailId":285, 
"objectiveId":29, 
"number":1, 
"text":"x", 
"subTopics":[{"subTopicId":1, 
       "number":1}] 
}; 

var selectedSubTopicId = 1; 

if (_.some(objectiveDetail.subTopics, function(currentTopic) { 
    return currentTopic.subTopicId === selectedSubTopicId; 
})) { 
    console.log("selectedSubTopicId exists"); 
} 

輸出

selectedSubTopicId exists 
16

還有一點更優雅的形式:

var result = _.some(objectiveDetail.subTopics, {subTopicId: selectedSubTopicId}); 
+0

如果該值未嵌套,則不能使用簡寫。 (['a','b','c'],_.partial(_。eq,'d')) –

0

對我來說這一個工作非常出色:它可以幫助你在那裏有許多列數據對證,說標題,類別和說明。

要檢查是否stringTosearch在任何數據的那些列的發現,你可以這樣做:

let searchResults = _.filter(yourArrayHere, (item) => { 
      return item.title.indexOf(stringTosearch) > -1 
        || item.category.indexOf(stringTosearch) > -1 
        || item.description.indexOf(stringTosearch) > -1; 
     }); 

它會返回你的陣列上,在任何您指定的列stringTosearch的任何對象。

相關問題