Как пробежаться по ключам объекта и проверить значения на пустоту?
Пытался сделать так, но это не работает
const obj = {
name: 'user',
surname: '',
}
const result = Object.values(obj).forEach(item => {
if (item.length === 0) {
return true;
}
});
if (result) {
console.log('Есть пустые значения');
} else {
console.log('пустых значений нет');
}
Ответы (2 шт):
Автор решения: Ruslan Mart
→ Ссылка
const obj = {
name: 'user',
surname: '',
};
const result = Object.values(obj).some((item) => item === '');
console.log(result);
Автор решения: OPTIMUS PRIME
→ Ссылка
Правильный вариант уже предложили :) Касаемо цикла из вопроса: .forEach() не умеет останавливаться, всегда перебирает массив до конца и вызывает функцию для всех элементов. Возвращенные вызовами значения ни на что не влияют, а сам forEach всегда возвращает undefined
Если хочется вручную прервать перебор - используйте обычные циклы:
let obj = { name: 'user', surname: '' };
let result = false, values = Object.values(obj);
for (let i = 0; i < values.length; i++) {
if (values[i].length == 0) {
result = true;
break;
}
};
console.log(result);
/*****/
let hasEmptyValues = false;
for (let key in obj) {
if (obj.hasOwnProperty(key) && obj[key].length == 0) {
hasEmptyValues = true;
break;
}
}
console.log(hasEmptyValues);
Проверку hasOwnProperty из второго цикла можно выкинуть, если гарантируется, что объект простой и ни от кого не наследует.
В виде функции получается чуть компактнее:
function hasEmptyValues(obj) {
for (let val of Object.values(obj)) {
if (!val) return true;
}
return false;
}
let test = { x: "" };
if ( hasEmptyValues(test) ) {
console.log("!!!");
}