Базовые структуры данных: проверьте, есть ли у объекта свойство - PullRequest
0 голосов
/ 26 июня 2018

У меня были некоторые проблемы с уроком Free Code Camp по проверке наличия у объекта определенных свойств.

В этом уроке мы должны использовать hasOwnProperty(), чтобы проверить, содержит ли объект users Alan, Jeff, Sarah и Ryan. Если присутствуют все пользователей, верните 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));

Ответы [ 5 ]

0 голосов
/ 26 июля 2018

for in перебирает каждое имя свойства и сохраняет его в массиве. Если переданный объект не имеет свойства массива (имя) возвращает 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
}
0 голосов
/ 11 июля 2018

В этом примере оператор «Alan» в пользователях возвращает «true». Почему вы не можете сделать что-то вроде:

'Alan' в пользователях && 'Sarah' в пользователях && 'Jeff' в пользователях ... и т.д.

??

0 голосов
/ 26 июня 2018

Дайте это. Есть много способов сделать это, но это было элегантное решение. Я отрубил идею от здесь .

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);
0 голосов
/ 26 июня 2018

Вам не нужно перебирать свойства. Вы должны перебрать массив имен, которые вы ищете.

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));
0 голосов
/ 26 июня 2018

Я бы зациклился на каждом человеке, и если значение хорошее 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));
...