変数selectedSubTopicId
とsubTopicオブジェクトの配列があります:objectiveDetail.subTopics[]
。各subTopic
objectにはfieldsubTopicId
があります
これを使用して、トピックボタンを有効または無効にし、追加します。 ng-disabledでlodashを使用してこの配列をテストし、配列のsubTopic
オブジェクト要素にsubTopicId
と等しいselectedSubTopicId
がある場合にtrueを報告できますか。
次に、objectiveDetailにあるデータのサンプルを示します。この場合、subTopics配列には要素が1つしかありません。
{"objectiveDetailId":285,
"objectiveId":29,
"number":1,
"text":"x",
"subTopics":[{"subTopicId":1,
"number":1}]
}
以下は、my Angular 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>
問題は、それがまったく機能せず、ボタンが無効になっていないことです。
あなたはそれを行う方法を尋ねませんでしたが、私はそれがあなたが知りたかったことだと思います。
すでに述べたように、 _.some
。配列内のすべての要素を反復処理し、コールバックを実行します。そのコールバックでは、トピックのプロパティの値が変数の値と等しいかどうかをテストできます。
var result = _.some(objectiveDetail.subTopics, function (topic) {
return topic.subTopicId === selectedSubTopicId;
});
_.some
は、コールバックがtrue
を返した要素が見つかった場合、残りの要素をスキップします。
もう少しエレガントな形式もあります。
var result = _.some(objectiveDetail.subTopics, {subTopicId: selectedSubTopicId});
_.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
これは非常にうまく機能しました。タイトル、カテゴリ、説明など、チェックするデータの列が多数ある場合に役立ちます。
これらのデータ列のいずれかにstringTosearch
が見つかったかどうかを確認するには、次のようにします。
let searchResults = _.filter(yourArrayHere, (item) => {
return item.title.indexOf(stringTosearch) > -1
|| item.category.indexOf(stringTosearch) > -1
|| item.description.indexOf(stringTosearch) > -1;
});
指定した列のいずれかにstringTosearch
がある配列のオブジェクトを返します。