我有一个变量selectedSubTopicId
,我有一个subTopic对象数组:objectiveDetail.subTopics[]
。每个subTopic
对象都有字段 subTopicId
我想用它来启用或禁用和添加主题按钮。我是否可以在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>
问题是它不能正常工作,按钮不显示已禁用。
答案 0 :(得分:46)
你没有要求怎么做,但我认为那是你想知道的。
正如我已经提到的,你可以使用_.some
,它将迭代数组中的每个元素并执行回调。在该回调中,您可以测试主题属性的值是否等于变量的值:
var result = _.some(objectiveDetail.subTopics, function (topic) {
return topic.subTopicId === selectedSubTopicId;
});
_.some
会跳过其余元素,如果它找到了回复true
的其中一个元素。
答案 1 :(得分:17)
还有一种更优雅的形式:
var result = _.some(objectiveDetail.subTopics, {subTopicId: selectedSubTopicId});
答案 2 :(得分: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
答案 3 :(得分:0)
这个对我很有帮助:它可以帮助您检查多列数据,比如标题,类别和描述。
要检查是否在任何这些数据列中找到stringTosearch
,您可以执行以下操作:
let searchResults = _.filter(yourArrayHere, (item) => {
return item.title.indexOf(stringTosearch) > -1
|| item.category.indexOf(stringTosearch) > -1
|| item.description.indexOf(stringTosearch) > -1;
});
它将返回您指定的任何列中具有stringTosearch
的数组的任何对象。