Почему это не работает (удалить свойство, соответствующее свойству объекта) - PullRequest
0 голосов
/ 08 января 2020

Почему это не работает? Реализуйте функцию свойства remove, которая принимает объект и имя свойства, и удаляет его, если они совпадают, и возвращает true, если не false

function removeProperty(obj, prop) {

  const keys = Object.keys(obj)

  for (const key of keys) {

    if (key === obj[prop]) {

      delete obj[prop]

      return true
    }
  }
  return false
}

Ответы [ 4 ]

2 голосов
/ 08 января 2020

Потому что obj[prop] это значение. Сравните key с prop:

function removeProperty(obj, prop) {
  const keys = Object.keys(obj)

  for (const key of keys) {
    if (key === prop) {
      delete obj[prop]

      return true
    }
  }
  return false
}

Однако, поскольку свойства объекта уникальны, вам не нужно их повторять. Используйте оператор in , чтобы проверить, существует ли свойство:

function removeProperty(obj, prop) {
  if (prop in obj) {
    delete obj[prop]

    return true
  }

  return false
}
1 голос
/ 08 января 2020

Вам не нужно повторять ключи для удаления одного свойства.

function removeProperty(obj, prop) {
  if(typeof obj[prop] !== "undefined") {
    delete obj[prop];
    return true;
  }
  return false;
}
0 голосов
/ 08 января 2020
delete obj[prop] will delete the property if it exists.

let o = {a:1,b:2};
removeProperty(o, 'a')

function removeProperty(obj, prop) {
   delete obj[prop];
}

console.log(o)
0 голосов
/ 08 января 2020

Итак, просто исправили if в

if (obj [ключ] === obj [prop])

и все заработало. Может кто-нибудь объяснить разницу между этим и кодом на вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...