32

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

我想用它来启用或禁用和添加主题按钮。我可以在 ng-disabled 中使用 lodash 来测试这个数组,如果数组的任何subTopic对象元素的 asubTopicId等于selectedSubTopicId.

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

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

这是 thefourtheye 建议的我的 Angular 控制器中的代码:

    $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>

问题是它不能很好地工作,并且按钮没有显示为禁用。

4

4 回答 4

49

你没有问怎么做,但我想这就是你想知道的。

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

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

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

于 2014-01-22T09:56:44.300 回答
20

还有一种更优雅的形式:

var result = _.some(objectiveDetail.subTopics, {subTopicId: selectedSubTopicId});
于 2014-01-22T10:37:28.027 回答
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
于 2014-01-22T09:26:49.557 回答
0

这对我很有效:它有助于您检查多列数据,例如标题、类别和描述。

要检查是否stringTosearch在任何这些数据列中找到,您可以执行以下操作:

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

它将返回stringTosearch您指定的任何列中包含的数组的任何对象。

于 2017-11-17T10:40:05.623 回答