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

时间:2014-01-22 09:17:05

标签: javascript lodash

我有一个变量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>

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

4 个答案:

答案 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的数组的任何对象。