基本数据结构:检查对象是否具有属性

时间:2018-06-26 20:35:12

标签: javascript boolean hasownproperty

在检查对象是否具有某些属性时,我在Free Code Camp课程上遇到了一些麻烦。

在本课程中,我们应该使用hasOwnProperty()检查users对象是否包含AlanJeffSarah和{{ 1}}。如果存在所有用户,则返回Ryan,否则,如果缺少这些用户,则代码需要返回true

我已经尝试了一个多小时,这是我最后的尝试,但是我无法弄清楚如何删除其中一个名称时如何返回false的代码。我倾向于过度考虑我的代码,因此我可能会想得太辛苦了。

提前谢谢!很抱歉,是否曾经有人问过这样的问题。我什么都找不到。

false

7 个答案:

答案 0 :(得分:2)

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

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));

答案 1 :(得分:1)

我会遍历每个人,如果值是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));

答案 2 :(得分:1)

试试吧。有很多方法可以做到这一点,但这是一个很好的解决方案。我从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);

答案 3 :(得分:0)

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

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

??

答案 4 :(得分:0)

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

   [{employeeID: "123",
    name : "abc",
    gender: "F"},

  {employeeID: "345",
   name : "def",
   gender: "F"}
   ]

答案 5 :(得分:0)

这有效

    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));

答案 6 :(得分:0)

我写了这个,它有效:

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
}