可以_lodash测试一个数组来检查数组元素是否有一个具有特定值的字段?

Sam*_*tar 27 javascript lodash

我有一个变量selectedSubTopicId,我有一个subTopic对象数组:objectiveDetail.subTopics[].每个subTopic 对象都有一个字段 subTopicId

我想用它来启用或禁用和添加主题按钮.我是否可以在ng-disabled中使用lodash来测试此数组,如果数组中的任何subTopic对象元素具有subTopicId等于的数组,则报告为true selectedSubTopicId.

这是objectiveDetail中的数据示例.在这种情况下,subTopics数组中只有一个元素.

{"objectiveDetailId":285,
 "objectiveId":29,
 "number":1,
 "text":"x",
 "subTopics":[{"subTopicId":1,
               "number":1}]
}
Run Code Online (Sandbox Code Playgroud)

这是我的角度控制器中由thefourtheye建议的代码:

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

单击功能未显示的我的按钮如下所示:

   <button data-ng-disabled="checkDuplicateSubTopicId(objectiveDetail, subTopicId)">
       Add Topic
   </button>
Run Code Online (Sandbox Code Playgroud)

问题是它不能正常工作,按钮不显示禁用.

Fel*_*ing 46

你没有要求怎么做,但我认为这是你想知道的.

正如我已经提到的,你可以使用_.some,它将迭代数组中的每个元素并执行回调.在该回调中,您可以测试主题​​属性的值是否等于变量的值:

var result = _.some(objectiveDetail.subTopics, function (topic) {
  return topic.subTopicId === selectedSubTopicId;
});
Run Code Online (Sandbox Code Playgroud)

_.some如果找到其中返回回调的元素,将跳过剩余的元素true.


Kir*_*ril 18

还有一些更优雅的形式:

var result = _.some(objectiveDetail.subTopics, {subTopicId: selectedSubTopicId});
Run Code Online (Sandbox Code Playgroud)