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



我在自由代码营课程中遇到了一些问题,即检查对象是否具有某些属性。

在本课中,我们应该使用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));

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

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

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

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

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

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

用户中的"艾伦"和用户中的"莎拉"和用户中的"杰夫"...等。

??

for in 循环遍历每个属性名称并存储在数组中。如果传递的 obj 没有数组(名称(的属性,则返回 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
}

这有效

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

我写了这个,它有效:

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
}

最新更新