Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lodash能否测试数组以检查数组元素是否具有具有特定值的字段?_Javascript_Lodash - Fatal编程技术网

Javascript lodash能否测试数组以检查数组元素是否具有具有特定值的字段?

Javascript lodash能否测试数组以检查数组元素是否具有具有特定值的字段?,javascript,lodash,Javascript,Lodash,我有一个变量selectedSubTopicId,我有一个subTopic对象数组:objectiveDetail.subTopics[]。每个子主题对象都有一个字段子主题ID 我想用它来启用或禁用和添加主题按钮。如果数组的任何subTopic对象元素的subTopicId与selectedSubTopicId相等,我是否可以在ng disabled中使用lodash来测试此数组并报告true 这是objectiveDetail中的数据示例。在本例中,子主题数组中只有一个元素 {"objecti

我有一个变量
selectedSubTopicId
,我有一个subTopic对象数组:
objectiveDetail.subTopics[]
。每个
子主题
对象都有一个字段
子主题ID

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

这是objectiveDetail中的数据示例。在本例中,子主题数组中只有一个元素

{"objectiveDetailId":285,
 "objectiveId":29,
 "number":1,
 "text":"x",
 "subTopics":[{"subTopicId":1,
               "number":1}]
}
下面是我的角度控制器中由Fourtheye建议的代码:

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

添加主题
问题是它不能正常工作,并且按钮没有显示为禁用。

您可以使用如下方法

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
你没有问怎么做,但我想那是你想知道的

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

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

如果找到回调返回的
true

还有一种更优雅的形式,则一些
会跳过剩余的元素:

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

这一条对我来说非常有效:它有助于检查多个数据列,比如标题、类别和描述

要检查这些数据列中是否有
stringTosearch
,可以执行以下操作:

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

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

可以(提示:)。谢谢!该值应别名为
。.includes
。.exists
。如果该值未嵌套,则不能使用速记。一些(['a','b','c'],0.partial(.eq,'d'))