#javascript #arrays #ecmascript-6
Вопрос:
Итак, у меня есть массив объектов для перебора, на каждой итерации мне нужно проверять, имеет ли названный ключ blocks
длину или нет.
Если все blocks
ключи пусты (длина === 0), то мне нужно выполнить операцию, в противном случае нет. Понял? Если ТОЛЬКО у ОДНОГО blocks
ключа есть a length > 0
, то операции следует избегать.
for (let i = 0; i < blockColumns.length; i ) {
if (!blockColumns[i].blocks.length) {
// TRIGGER OPERATION
}
}
В приведенном выше коде проблема заключается в том, что операция будет запущена, когда по крайней мере один blocks
ключ не имеет длины, а это мне не нужно. Операция должна запускаться ТОЛЬКО тогда, когда все blocks
ключи есть length === 0
.
Ответ №1:
Используйте Array.every()
, чтобы проверить, что каждый элемент имеет длину 0 (!0 === true). Если все элементы имеют длину 0, то каждый вернется true
. Если false
встречается a (т. Е. длина > 0), каждый вернет > false
немедленно.
const allEmpty = blockColumns.every(o => !o.blocks.length)
if(allEmpty) doSomething()
Ответ №2:
Это звучит как нечто, для чего Array.prototype.every был бы полезен:
if (blockColumns.every((el) => el?.blocks?.length === 0)) {
// Do your operation
}
Я использовал здесь необязательную цепочку, так как я не уверен, может ли быть случай, когда у элемента нет blocks
свойства, или если у этого свойства может не быть length
свойства. Но в зависимости от того, насколько вы уверены в своей структуре данных, вам может и не понадобиться этого делать.
Ответ №3:
что ж, тогда вы можете сделать
x = 0
for (let i = 0; i < blockColumns.length; i ) {
if (!blockColumns[i].blocks.length > 0) {
x =1;
}
}
if(x == blockColumns.length){
//do something
}
это очень простой способ сделать это, и я не думаю, что он вообще эффективен, но на данный момент он выполняет свою работу 😀
Ответ №4:
let doOperation = true;
for (let i = 0; i < blockColumns.length; i ) {
if (blockColumns[i].blocks.length > 0) {
doOperation = false
}
}
if (doOperation) {
//Some operation
}
не уверен, что я последую за вами, но сработает ли это?
Комментарии:
1. Это не работает. Помните, что если ВСЕ БЛОКИ пусты, операция должна сработать.
2. @Реагирование-это именно то, что делает этот код? Если какой-либо блок непуст,
doOperation
становитсяfalse
.