Подтвердить что ты не робот

Может _lodash проверить массив, чтобы проверить, имеет ли элемент массива поле с определенным значением?

У меня есть переменная selectedSubTopicId, и у меня есть массив объектов subTopic: objectiveDetail.subTopics[]. Каждый subTopic объект имеет поле subTopicId

Я хотел бы использовать его для включения или отключения и добавления темы. Могу ли я использовать lodash в ng-disabled для проверки этого массива и сообщить об этом, если какой-либо элемент объекта subTopic в массиве имеет subTopicId, равный selectedSubTopicId.

Вот пример данных, которые в объектеDetail. В этом случае только один элемент в массиве subTopics.

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

Вот код в моем контроллере 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>

Проблема в том, что он не совсем работает, и кнопка не отображается отключена.

4b9b3361

Ответ 1

Вы не просили, как это сделать, но я предполагаю, что вы хотели знать.

Как я уже упоминал, вы можете использовать _.some, который будет перебирать каждый элемент в массиве и выполнять обратный вызов. В этом обратном вызове вы можете проверить, равно ли значение свойства topic значение переменной:

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

_.some пропустит оставшиеся элементы, если он найдет тот, для которого возвращался обратный вызов true.

Ответ 2

Существует также немного более элегантная форма:

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

Ответ 3

Вы можете использовать _.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

Ответ 4

Этот метод работал у меня очень хорошо: он помогает там, где у вас есть много столбцов данных для проверки, например название, категория и описание.

Чтобы проверить, найден ли stringTosearch в любом из этих столбцов данных, вы можете сделать:

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

Он вернет любой объект вашего массива с stringTosearch в любом из указанных вами столбцов.