Для чего-то подобного нет встроенной функциональности.Предполагая, что свойства не видоизменяются при вызове .val()
, вы могли бы вызвать .val()
первоначально для получения объекта, подсчитать количество ключей (включая унаследованные ключи) с помощью for..in
, изатем используйте for..in
снова , чтобы выполнить итерацию и проверить, насколько вы близки к концу цикла:
const val = posts.val();
let totalKeyCount = 0;
for (const _ in posts.val()) {
totalKeyCount++;
}
let keyIndex = 0;
for (const key in posts.val()) {
keyIndex++;
if(val[key][postId] != undefined) {
found = true;
//do something
} else {
if (keyIndex === totalKeyCount) {
console.log('last iteration');
}
}
}
Но, если вы не зависит от унаследованных ключей, было бы лучше использовать Object.keys
, который возвращает массив и какие методы массива можно использовать.
Предполагаявы пытаетесь найти определенное значение в объекте (и в самом объекте), вместо этого вы можете использовать .find
для Object.values
:
const foundPost = Object.values(posts.val()).find(item => item[postId] !== undefined);
// if an item[postId], if it exists, will be truthy, simplify to `item => item[postId]`
if (foundPost) {
// do something with the found post
} else {
// all iterations have been completed, and nothing was found
}
Также обратите внимание, что порядок свойств повторяется дляв цикле for..in
не полностью надежен.Как MDN говорит:
Цикл for ... in перебирает свойства объекта в произвольном порядке (подробнее об операторе delete смотрите, почему нельзя зависеть откажущаяся упорядоченность итерации, по крайней мере, в настройках кросс-браузера).