gpt4 book ai didi

javascript - 对于 in 和 Object.keys - es6

转载 作者:行者123 更新时间:2023-12-02 23:30:57 26 4
gpt4 key购买 nike

这两个函数不应该返回相同的结果吗? For in 给了我 ForInStatement 不允许语法限制,而 Object.keys 给了我完全不同的结果。一返回false,为什么又循环了?

我想检查对象中的任何元素是否为 null 或为空。一返回false,为什么还在Object.keys中循环?而在 ForIn 中,一旦在对象中检测到空元素,它就会返回 false 并且循环停止。

对于输入

checkEmpty = (obj) => {
for (const key in obj) {
if (obj[key] === null || obj[key] === '') {
console.log('forIn', obj[key] === null || obj[key] === '');
return false;
}
}
return true;
}

对象.key

checkEmpty = (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] === null || obj[key] === '') {
console.log('forEach', obj[key] === null || obj[key] === '');
return false;
}
});
return true;
}

最佳答案

Array.forEach() 返回值被忽略,并且您不能像 for...in 中那样打破循环。 。您的案例可以使用Array.some()检查失败后立即返回结果。

注释 1: Array.some() 将返回true每当支票返回 true Array.every() 将返回true仅当所有检查返回true时。

注2:你的函数背后的想法似乎是 return true如果至少有一个null''值,但你的代码却做了相反的事情。您可以对我的函数的结果求反以获得 false当有空项目时。

注3: Array.keys/values/entries 之间还有另一个区别。与 Array.forEach() ,以及 for...in环形。 for...in循环还将循环所有继承的可枚举属性,而 Object.x()方法只会迭代自己的可枚举属性。

// use object values, I use Object.entries to show the key in the console
const checkHasEmpty = obj => Object.entries(obj).some(([key, value]) => console.log(`key: ${key}`) || value === null || value === '')

console.log(checkHasEmpty({}))

console.log(checkHasEmpty({ a: 1, b: null, c: 3 }))

console.log(checkHasEmpty({ a: '', b: 2 }))

console.log(checkHasEmpty({ a: 1, b: 2, c: null }))

关于javascript - 对于 in 和 Object.keys - es6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56506771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com