2

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

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

4

7 回答 7

3

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

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

于 2018-06-26T20:44:11.187 回答
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));

于 2018-06-26T20:43:35.337 回答
1

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

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);
于 2018-06-26T20:43:37.800 回答
0

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

用户中的“Alan”&&用户中的“Sarah”和用户中的“Jeff”……等等。

??

于 2018-07-11T18:11:48.747 回答
0

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
}
于 2018-07-26T20:22:21.347 回答
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));
于 2019-09-17T14:41:10.930 回答
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
}
于 2020-04-25T17:20:33.837 回答