【问题标题】:Basic Data Structures: Check if an Object has a Property基本数据结构:检查对象是否具有属性
【发布时间】:2018-06-26 20:35:11
【问题描述】:

我在检查对象是否具有某些属性的免费代码营课程中遇到了一些问题。

在本课中,我们应该使用hasOwnProperty() 来检查users 对象是否包含AlanJeffSarahRyan。如果所有用户都在场,则返回true,否则,如果其中任何一个用户丢失,则代码需要返回false

我已经尝试了一个多小时,这就是我最终的结果,但是当其中一个名称被删除时,我无法弄清楚如何让代码返回 false。我倾向于过度思考我的代码,所以我可能想得太用力了。

提前致谢!很抱歉,如果以前有人问过这样的问题。我什么都没找到。

let users = {
  Alan: {
    age: 27,
    online: true
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: true
  },
  Ryan: {
    age: 19,
    online: true
  }
};

function isEveryoneHere(obj) {
  // change code below this line
  for (let name in users) {
    if (name === 'Alan' && 'Jeff' && 'Sarah' && 'Ryan') {
      return true;
    } else {
      return false;
    }
  }
  // change code above this line
}

console.log(isEveryoneHere(users));

【问题讨论】:

  • 从 0 开始计数器,当名字是 Alan、Jeff、Sarah 或 Ryan 时加 1。然后当循环结束时检查计数器是否等于 4
  • 除了 if 语句中的不正确条件外,当我在开发人员控制台中运行时您的代码返回 false 而没有返回语句...

标签: javascript boolean hasownproperty


【解决方案1】:

您无需遍历属性。您应该遍历要查找的名称数组。

function isEveryoneHere(obj) {
  // change code below this line
  for (let name of required) {
    if (!obj.hasOwnProperty(name)) {
      return false;
    }
  }
  return true;
  // change code above this line
}

let users = {
  Alan: {
    age: 27,
    online: true
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: true
  },
  Ryan: {
    age: 19,
    online: true
  }
};
let users2 = {
  Alan: {
    age: 27,
    online: true
  },
  Jeff: {
    age: 32,
    online: true
  },
  Jane: {
    age: 48,
    online: true
  },
  Ryan: {
    age: 19,
    online: true
  }
};

const required = ['Alan', 'Jeff', 'Sarah', 'Ryan'];

console.log(isEveryoneHere(users));
console.log(isEveryoneHere(users2));

【讨论】:

  • 这个真的简单易懂!我很欣赏第二个数组,它展示了当其中一个参数不存在时函数的反应。谢谢!快速的问题,因为课程并没有真正解释太多:你为什么需要'!'在!obj?
  • 那是“非”运算符。当所需的名称存在时,它返回 false。
【解决方案2】:

我会遍历每个人,如果值好continue,如果不是return false。如果我们完成循环,我们将返回true

let users = {
  Alan: {
    age: 27,
    online: true
  },
  Jeff: {
    age: 32,
    online: true
  },
  Sarah: {
    age: 48,
    online: true
  },
  Ryan: {
    age: 19,
    online: true
  }
};

function isEveryoneHere(obj) {
  // change code below this line
  for (let name in obj) {
    if(!obj.hasOwnProperty(name) || !obj[name].online){
      return false;
    }
  }
  return true;
  // change code above this line
}

console.log(isEveryoneHere(users));

【讨论】:

    【解决方案3】:

    试一试。有很多方法可以做到这一点,但这是一个优雅的解决方案。我从here 中删除了这个想法。

    let users = {
      Alan: {
        age: 27,
        online: true
      },
      Jeff: {
        age: 32,
        online: true
      },
      Sarah: {
        age: 48,
        online: true
      },
      Ryan: {
        age: 19,
        online: true
      }
    };
    
    function isEveryoneHere(obj) {
      // change code below this line
      var arr = ["Alan", "Jeff", "Sarah", "Ryan"];
      var hasAllKeys = arr.every(function(item){
        return obj.hasOwnProperty(item);
      });
      return hasAllKeys;
      // change code above this line
    }
    
    isEveryoneHere(users);
    

    【讨论】:

    • 谢谢!这与通过我测试的另一个人的答案非常相似。我喜欢这个答案的简单性。非常感谢您的帮助!
    【解决方案4】:

    在示例中,users 中的语句“Alan”返回“true”。为什么你不能这样做:

    用户中的'Alan' && 用户中的'Sarah' && 用户中的'Jeff'......等等。

    ??

    【讨论】:

      【解决方案5】:

      for in 循环遍历每个属性名称并存储在一个数组中。如果传递的 obj 不具有 array(name) 的属性,则返回 false。

      let required = [];
      for (let user in users){
        required.push(user);
      }
      function isEveryoneHere(obj) {
        // change code below this line
        for (let name of required) {
          if (!obj.hasOwnProperty(name)) {
            return false;
          }
        }
        return true;
        // change code above this line
      }
      

      【讨论】:

      • 请对您的建议添加一些解释。
      【解决方案6】:

      这行得通

          let users = {
        Alan: {
          age: 27,
          online: true
        },
        Jeff: {
          age: 32,
          online: true
        },
        Sarah: {
          age: 48,
          online: true
        },
        Ryan: {
          age: 19,
          online: true
        }
      };
      
      function isEveryoneHere(obj) {
      
      if(users.hasOwnProperty('Alan', 'Jeff','Sarah','Ryan')){
        return true;
      }
        return false;
      
      }
      
      console.log(isEveryoneHere(users));
      

      【讨论】:

        【解决方案7】:

        我写了这个并且它有效:

        function isEveryoneHere(obj) {
          // Only change code below this line
          let filter = ['Alan', 'Jeff', 'Sarah', 'Ryan'];
          let result = true;
          filter.forEach(
            (u) => {
              if(!obj.hasOwnProperty(u)){
                result = false;
              }
            }    
          );     
          return result;
          // Only change code above this line
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-26
          • 2013-07-03
          • 2014-05-08
          • 1970-01-01
          • 2017-10-09
          • 2012-02-02
          • 2021-03-12
          • 1970-01-01
          相关资源
          最近更新 更多