Как выполнить итерацию по объектам, хранящимся в массиве firebase в JavaScript?

На данный момент я храню несколько объектов в Firebase. После успешного извлечения элементов из Firebase и сохранения их в firebaseArray я хочу еще больше прореживать нежелательные элементы, удаляя элементы в firebaseArray, у которых нет желаемого свойства. Рассмотрим мой код на данный момент, он работает не так, как хотелось бы, однако в консоли нет ошибок:

var querylatestPosts = firebase.database().ref("Topics");
$scope.latestPosts = $firebaseArray(querylatestPosts);
console.info($scope.latestPosts) ;
$scope.latestPosts.forEach(function(el) {
 if ($scope.checkWorldview(el) == false) {
   delete $scope.latestPosts.el ;
 }
});

(Обратите внимание, что я не могу зарегистрировать 'el' в консоли, и, похоже, forEach не выполняется, так как я ничего не могу зарегистрировать в функции в консоли)

Функция checkWorldview ведет себя должным образом, когда элементы загружаются в разных экземплярах, и возвращает false, если требуемое свойство отсутствует в рассматриваемом элементе. Таким образом, если функция возвращает false, я хочу удалить определенный элемент в $ scope.latestPosts, который не содержит требуемого свойства.

Надеюсь, это понятно, заранее благодарю вас за любую помощь, которую вы можете предложить!

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

То, как вы используете $ firebaseArray, не рекомендуется документами (глянь сюда), в которых указано, что $ firebaseArray доступен только для чтения и не должен изменяться.

Итак, у вас есть несколько вариантов:

  • Вместо фильтрации массива на стороне клиента вам следует изменить запрос, который вы используете для извлечения данных из Firebase, чтобы получать только элементы, которые имеют желаемое свойство (например, используйте в запросе «equalTo»)

ИЛИ ЖЕ

  • Не используйте $ firebaseArray, потому что вы используете его не так, как предполагалось. Вместо этого используйте обычный, старый добрый массив JavaScript.

** Кроме того, просто общий комментарий: не удаляйте элементы из массива, когда вы просматриваете его, поскольку это, как правило, плохая практика (мы не ожидаем, что в массивы будут добавлены / удалены элементы, пока мы перебираем их). Вместо этого используйте Array.filter.

Спасибо! Я попробую.

Arne Verster 26.06.2018 04:45

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