Определение, являются ли все атрибуты на объекте JavaScript нулевым или пустой строкой
Каков самый элегантный способ определить, являются ли все атрибуты в объекте javascript нулевыми или пустыми? Он должен работать для произвольного количества атрибутов.
{'a':null, 'b':''} //should return true for this object
{'a':1, 'b':''} //should return false for this object
{'a':0, 'b':1} //should return false
{'a':'', 'b':''} //should return true
Ответы
Ответ 1
Создайте функцию для проверки и проверки:
function checkProperties(obj) {
for (var key in obj) {
if (obj[key] !== null && obj[key] != "")
return false;
}
return true;
}
var obj = {
x: null,
y: "",
z: 1
}
checkProperties(obj) //returns false
Ответ 2
Ответ 2017: Проверьте все значения с помощью Object.values(). Возвращает массив со значениями, которые можно проверить с помощью Array.every() или Array.some()... и т.д.
const isEmpty = Object.values(object).every(x => (x === null || x === ''));
Ответ 3
Здесь моя версия, в частности проверка нулевой и пустой строк (было бы проще просто проверить наличие ложных данных)
function isEmptyObject(o) {
return Object.keys(o).every(function(x) {
return o[x]===''||o[x]===null; // or just "return o[x];" for falsy values
});
}
Ответ 4
Вы можете использовать прототип Array.reduce на ваших объектных ключах.
Предполагая, что объект структурирован следующим образом:
var obj = {
x: null,
y: "",
z: 1
}
вы можете использовать следующую команду, чтобы узнать, не были ли все свойства отключены или установлены пустые строки, используя только одну строку:
Object.keys(obj).reduce((res, k) => res && !(!!obj[k] || obj[k] === false || !isNaN(parseInt(obj[k]))), true) // returns false
Если вы хотите узнать, установлены ли все его свойства, вы должны удалить отрицание перед условиями и установить для исходного значения результата значение true, только если у объекта есть ключи:
Object.keys(obj).reduce((res, k) => res && (!!obj[k] || obj[k] === false || !isNaN(parseInt(obj[k]))), Object.keys(obj).length > 0) // returns false as well
Ответ 5
На основе ответа adeneo я создал однострочное условие. Надеюсь, что это будет полезно кому-то.
var test = {
"email": "[email protected]",
"phone": "1234567890",
"name": "Test",
"mobile": "9876543210",
"address": {
"street": "",
"city": "",
"state": "",
"country": "",
"postalcode": "r"
},
"website": "www.test.com"
};
if (Object.keys(test.address).every(function(x) { return test.address[x]===''||test.address[x]===null;}) === false) {
console.log('has something');
} else {
console.log('nothing');
}
Вы можете проверить его https://jsfiddle.net/4uyue8tk/2/
Ответ 6
На основе tymeJv answer =)
function checkProperties(obj) {
var state = true;
for (var key in obj) {
if ( !( obj[key] === null || obj[key] === "" ) ) {
state = false;
break;
}
}
return state;
}
var obj = {
x: null,
y: "",
z: 1
}
checkProperties(obj) //returns false
Надеюсь, что это поможет =)
Ответ 7
Просто дополняя прошлые ответы: они будут работать, если ваш объект не содержит массивов или объектов. Если это произойдет, вам нужно сделать "глубокую проверку".
Поэтому я придумала это решение. Он будет оценивать объект как пустой, если все его значения (и значения внутри значений) не undefined
, {}
или []
.
function deepCheckEmptyObject(obj) {
return Object.values(obj).every( value => {
if (value === undefined) return true;
else if ((value instanceof Array || value instanceof Object) && _.isEmpty(value) ) return true;
else if (value instanceof Array && !_.isEmpty(value)) return deepCheckEmptyArray(value);
else if (value instanceof Object && !_.isEmpty(value)) return deepCheckEmptyObject(value);
else return false;
});
}
function deepCheckEmptyArray(array) {
return array.every( value => {
if (value === undefined) return true;
else if ((value instanceof Array || value instanceof Object) && _.isEmpty(value)) return true;
else if (value instanceof Array && !_.isEmpty(value)) return deepCheckEmptyArray(value);
else if (value instanceof Object && !_.isEmpty(value)) return deepCheckEmptyObject(value);
else return false;
});
}
Обратите внимание, что он использует Lodash .isEmpty()
для тяжелой работы после того, как мы "изолировали" значение. Здесь Lodash импортируется как '_'.
Надеюсь, поможет!
Ответ 8
Основываясь на других ответах, я бы использовал lodash для проверки isEmpty
на объекте, так и на его свойствах.
const isEmpty = (object) => return _.isEmpty(object) || !Object.values(object).some(x => !_.isEmpty(x))
Ответ 9
Это пропустить атрибут функции
function checkIsNull(obj){
let isNull=true;
for(let key in obj){
if (obj[key] && typeof obj[key] !== 'function') {
isNull = false;
}
}
return isNull;
}
var objectWithFunctionEmpty={
"name":undefined,
"surname":null,
"fun": function (){ alert('ciao'); }
}
var objectWithFunctionFull={
"name":undefined,
"surname":"bla bla",
"fun": function (){ alert('ciao'); }
}
checkIsNull(objectWithFunctionEmpty); //true
checkIsNull(objectWithFunctionFull); //false
Ответ 10
Это даст вам все ключи от объекта, который является пустым, неопределенным и нулевым
Object.keys(obj).filter((k)=> {
if (obj[k] === "" || obj[k]===undefined || obj[k]===null) {
return k;
}
});
Ответ 11
Это прекрасно работает со мной:
checkProperties(obj) {
let arr = [];
for (let key in obj) {
arr.push(obj[key] !== undefined && obj[key] !== null && obj[key] !== "");
}
return arr.includes(false);
}
Это вернет true или false, если хотя бы одно из значений пустое или что-то в этом роде.
Ответ 12
Вы можете использовать метод Object.values(), чтобы получить все значения объекта (как массив значений объекта), а затем проверить, содержит ли этот массив значений null или " " значения, с помощью метода _.include, предоставленного библиотекой lodash.
const checkObjectProperties = obj => {
const objValues = Object.keys(obj);
if (_.includes(objValues, "") || _.includes(objValues, null)) {
return false;
} else {
return true
}
const incorrectObjProps = { one: null, two: "", three: 78 }
const correctObjProps = { one: "some string" }
checkObjectProperties(incorrectObjProps) // return false
checkObjectProperties(correctObjProps) // return true
}