в моем приложении 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));
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Фильтр - это функция, которую вы ищете. Насколько я понял ваш вопрос, прочитав ваш код, вы хотите сравнить отдельный идентификатор с идентификатором в JSON? Если я ошибаюсь, рекомендую здесь, и я отредактирую ответ:
function findIDAndSetShowingTrue(array, id) {
return array.filter(curr=> curr.id === id).map(curr => ({...curr, show: true}));
}
это правда. Пожалуйста, не могли бы вы мне помочь, как таким образом изменить свойство SHOW на true? Для этого возвращается идентификатор
проверьте Массив # найти. Думаю, он больше подходит для этого случая.
@ Томас, спасибо, поиск - это первое, что я пробую, но в этом случае у меня не работает
@Arter - теперь ответ должен решить вашу проблему - если вам также нужны старые объекты массива с show values == false, вам нужно использовать тот же синтаксис, который я использую на карте: (... curr, show: true) . Это называется оператором распространения, и с его помощью вы можете объединить два массива - он работает как Object.assing.
Ваша функция findId ожидает в качестве параметров массив и целое число.
findId(key.id, indexOfRow);Это выглядит так, будто вы передаете в него два целых числа. Я ожидал чего-то вродеfindId( $scope.tableParams.data, indexOfRow );