J-b*_*bob 27 javascript attributes object
确定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
Run Code Online (Sandbox Code Playgroud)
PVe*_*eer 47
2017答案:使用Object.values()检查所有值.返回一个数组,其中包含可以使用Array.every()或Array.some()...等检查的值.
const isEmpty = Object.values(object).every(x => (x === null || x === ''));
Run Code Online (Sandbox Code Playgroud)
tym*_*eJV 30
创建一个循环和检查的函数:
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
Run Code Online (Sandbox Code Playgroud)
ade*_*neo 22
这是我的版本,专门检查null和空字符串(更容易检查falsy)
function isEmptyObject(o) {
return Object.keys(o).every(function(x) {
return o[x]===''||o[x]===null; // or just "return o[x];" for falsy values
});
}
Run Code Online (Sandbox Code Playgroud)
Gau*_*rya 11
let obj = { x: null, y: "hello", z: 1 };
let obj1 = { x: null, y: "", z: 0 };
!Object.values(obj).some(v => v);
// false
!Object.values(obj1).some(v => v);
// true
Run Code Online (Sandbox Code Playgroud)
Ama*_* C. 10
快速简单的解决方案:
Object.values(object).every(value => !!value);
Run Code Online (Sandbox Code Playgroud)
您可以在对象的键上使用Array.reduce原型.
假设对象的结构如下:
var obj = {
x: null,
y: "",
z: 1
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下指令来发现是否所有属性都未设置或仅使用一行设置为空字符串:
Object.keys(obj).reduce((res, k) => res && !(!!obj[k] || obj[k] === false || !isNaN(parseInt(obj[k]))), true) // returns false
Run Code Online (Sandbox Code Playgroud)
如果要发现是否设置了所有属性,则必须在条件之前删除否定,并且仅当对象具有键时才将初始结果值设置为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
Run Code Online (Sandbox Code Playgroud)
使用Array.some()和检查值不null,不empty就是更有效比使用Array.every和周围检查它的其他方式。
const isEmpty = !Object.values(object).some(x => (x !== null && x !== ''));
Run Code Online (Sandbox Code Playgroud)
根据adeneo的回答,我创建了一个单行条件。希望它会对某人有所帮助。
var test = {
"email": "test@test.com",
"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');
}
Run Code Online (Sandbox Code Playgroud)
你可以测试一下https://jsfiddle.net/4uyue8tk/2/
只是补充过去的答案:如果您的对象不包含数组或对象,它们就会起作用。如果确实如此,您将需要进行“深度检查”。
所以我想出了这个解决方案。如果对象的所有值(以及值内的值)都是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;
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,在我们“隔离”一个值之后,它使用 Lodash.isEmpty()来完成繁重的工作。此处,Lodash 被导入为“_”。
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
36773 次 |
| 最近记录: |