为了账号安全,请及时绑定邮箱和手机立即绑定

对于 in 和 Object.keys - es6

对于 in 和 Object.keys - es6

12345678_0001 2021-06-22 17:19:52
这两个函数不应该返回相同的吗?因为 in 给了我 ForInStatement 不允许的语法限制,而 Object.keys 给了我完全不同的结果。一旦它返回false,为什么它又循环了?我想检查对象中的任何元素是否为空或空。只要它返回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;}对象.keyscheckEmpty = (obj) => {    Object.keys(obj).forEach(key => {          if (obj[key] === null || obj[key] === '') {            console.log('forEach', obj[key] === null || obj[key] === '');            return false;          }    });    return true;}
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

Array.forEach()返回值被忽略,并且您不能像在for...inArray.some()一旦检查失败,您就可以使用您的案例返回结果。

注1Array.some()将返回true只要检查返回true。只有当所有支票Array.every()都返回时true才会返回true

注意 2true如果至少有一个null''值,您的函数背后的想法似乎是返回,但您的代码却恰恰相反。false当有空项目时,您可以否定我的函数的结果。

注 3Array.keys/values/entrieswithArray.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 }))


查看完整回答
反对 回复 2021-06-24
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

似乎在第二个片段中,错误就在这里


Object.keys(obj).forEach(key => {

          if (obj[key] === null || obj[key] === '') {

forEach将接受参数,因为(item,index)whereitem是数组的元素,是数组index中的当前索引。


因此obj[key]将尝试获取键指定的数组中的元素,该元素也可以是未定义的


试试这个obj[key]只替换key或obj[index]


Object.keys(obj).forEach(key => {

          if (key === null || key === '') {


查看完整回答
反对 回复 2021-06-24
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信