例如,person对象
let person = {
name: "章三",
age: 25,
address: "",
};
如何优雅的判断其中有属性为空,不要用for循环
例如,person对象
let person = {
name: "章三",
age: 25,
address: "",
};
如何优雅的判断其中有属性为空,不要用for循环
如果你想要判断所有属性当中是否有为空的,那么不管怎么样都还是得借助循环,不管是for
、forEach
还是 map
等等。
不过一般来说如果为空需要提醒用户填写的话,最好不要单独写一个函数去跑循环:
function submitData(form){
const keysList = Object.keys(form)
for(let key of keysList) {
if(!form[key]) return alert(`${key} is empty!`)
}
....
}
一般来说都是借助的UI库提供的表单校验方法,或者引入 async-validator 这个异步校验库来处理。来提醒用户去完成内容填写。
let isSomeEmpty = Object.values(person).some(v => v === '')
console.log(isSomeEmpty)
要想找出某个“值”符合条件的项,那一定是需要遍历的,遍历就只有两种方法:
如果不用 for
循环,那可以用 white
,也可以使用一些底层使用循环来实现的工具方法,比如
let person = {
name: "章三",
age: 25,
address: "",
};
var hasEmptyValue = Object.entries(person)
.some(([, v]) => v === undefined || v === null || v === "");
console.log(hasEmptyValue);
这可能还没有一个 for...of 循环效率高,但确实没用 for 循环。for 循环只需要进行一个不完全遍历就可以得到结果,上面的代码进行了一次完全遍历 (entries()
),和一次不完全遍历(some()
)。
const isObjcetEmpty = (obj: {[key: string]: any}) => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object
export default isObjcetEmpty
Object.keys(person).length === Object.values(person).filter(v => v).length
比较keys和values即可
// Not recommended !!!😂
/(?<!\\)""/g.test(JSON.stringify({
name: "章三",
age: 25,
address: "",
}))
无所谓,递归会出手
const obj = {
name: '1',
age: '12',
bar: ''
}
function hasEmpty(target, checkkeys) {
if (!checkkeys.length) return false;
if (target[checkkeys.pop()] === '') return true;
return hasEmpty(target, checkkeys)
}
hasEmpty(obj, Object.keys(obj))
不明白为什么不能有循环,难道属性很多?
const obj = {a: 0, b: '', c: "", d: null, e: undefined};
objStr = JSON.stringify(obj);
if (objStr.indexOf('""') >= 0 || objStr.indexOf('null') >= 0) {
console.log('存在空的属性')
}
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
Object.values(person).includes('')