Найти в массиве JSON по введенному вручную ID

в моем приложении angularjs я получаю объект JSON из API. У меня есть поле ввода, в которое я могу ввести идентификатор вручную, и если элемент с этим идентификатором существует, мне нужно изменить его свойство. Я также сохраняю этот идентификатор в sessionStorage, поэтому, когда пользователь обновляет страницу, он получает значение, подобное перед обновлением.

Вот json из API, где мне нужно изменить свойство ON THE FLY SHOW на true, если оно существует

$scope.tableParams.data = [
 {id: 1015, type: "ssss", show: false},
 {id: 1016, type: "ssss", show: false},
 {id: 1017, type: "ssss", show: false},
 {id: 1018, type: "ssss", show: false}
]

Функция для получения входного значения и сохранения в хранилище сеанса, а также для изменения свойства SHOW

$scope.getIndex = function (indexOfRow) { //indexOfRow is passed data from input field
       //here I want to change show to true for passed id 

        sessionStorage.setItem("indexOfOpenedRow", JSON.stringify(indexOfRow));
    }

Я пытаюсь ответить от здесь, но у меня не работает

Я тоже пробую это, но всегда получаю undefined

function findId(array, id) {
        var i, found, obj;
        for (i = 0; i < array.length; ++i) {
          obj = array[i];
          if (obj.id == id) {
            console.info(obj);
            return obj;
          }
        }
        return undefined; // <= You might consider null or undefined here
      }
$scope.getIndex = function (indexOfRow) { //indexOfRow is passed data from input field
       //here I want to change show to true for passed id 
        angular.forEach($scope.tableParams.data, function(key, value){
            var result = findId(key.id, indexOfRow);
            console.info(result);
        });
        sessionStorage.setItem("indexOfOpenedRow", JSON.stringify(indexOfRow));
    }

Ваша функция findId ожидает в качестве параметров массив и целое число. findId(key.id, indexOfRow); Это выглядит так, будто вы передаете в него два целых числа. Я ожидал чего-то вроде findId( $scope.tableParams.data, indexOfRow );

Shilly 29.10.2018 09:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Фильтр - это функция, которую вы ищете. Насколько я понял ваш вопрос, прочитав ваш код, вы хотите сравнить отдельный идентификатор с идентификатором в JSON? Если я ошибаюсь, рекомендую здесь, и я отредактирую ответ:

function findIDAndSetShowingTrue(array, id) {
    return array.filter(curr=> curr.id === id).map(curr => ({...curr, show: true}));
}
  • Функция фильтра выполняет итерацию по каждому дочернему элементу внутри массива и дает вам конкретное значение (array.filter).
  • Затем вы можете использовать этот дочерний элемент и сравнить его как оператор if с некоторыми другими значениями (Текущий).
  • В конце вы сравниваете current.id и свой входной идентификатор (current.id === id) и возвращаете объект Текущий, если он истинный.

это правда. Пожалуйста, не могли бы вы мне помочь, как таким образом изменить свойство SHOW на true? Для этого возвращается идентификатор

Arter 29.10.2018 09:27

проверьте Массив # найти. Думаю, он больше подходит для этого случая.

Thomas 29.10.2018 09:28

@ Томас, спасибо, поиск - это первое, что я пробую, но в этом случае у меня не работает

Arter 29.10.2018 09:29

@Arter - теперь ответ должен решить вашу проблему - если вам также нужны старые объекты массива с show values ​​== false, вам нужно использовать тот же синтаксис, который я использую на карте: (... curr, show: true) . Это называется оператором распространения, и с его помощью вы можете объединить два массива - он работает как Object.assing.

Jonathan Stellwag 29.10.2018 10:04

Другие вопросы по теме