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

Basic Data Structures: Check if an Object has a Property

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

在本课中,我们应该使用 hasOwnProperty() 来检查 users 对象是否包含 AlanJeffSarahRyan。如果 所有 用户都存在,则 return true,否则,如果缺少任何这些用户,则代码需要 return false.

我已经尝试了一个多小时,这就是我结束的地方,但我不太清楚如何将代码获取到 return 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));

我会遍历每个人,如果值好 continue 否则 return false。如果我们到达循环的末尾,我们 return 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));

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

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

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

示例中,语句"Alan" in users returns 'true'。你为什么不能做这样的事情:

'Alan' 在用户中 && 'Sarah' 在用户中 && 'Jeff' 在用户中...等等

??

for in 遍历每个 属性 名称并存储在一个数组中。如果传递的 obj 没有 array(name) returns 的 属性 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
}