Удаление свойства из объекта в JavaScript - PullRequest
1 голос
/ 03 апреля 2012

Я перебираю объект в javascript и удаляю неопределенный элемент, используя:

for (var key in result) {
  if (result.hasOwnProperty(key)) {
     var obj = result[key];
     if (typeof obj.name === 'undefined') {
        delete result[key];
     }
  }
}

Если я не использую delete, это просто отлично. Однако, когда я использую удаление, я получаю ошибку, 'TypeError: Cannot read property 'name' of undefined'

Есть идеи, что я здесь не так делаю?

Спасибо

РЕДАКТИРОВАТЬ: Итерируемый объект:

{
  date: Mon, 02 Apr 2012 17: 48: 17 GMT,
  t_date: Mon, 02 Apr 2012 17: 48: 17 GMT,
  start: 0,
  _id: 4f79e661d7cb8ccc1f000005
} {
  date: Mon,n02 Apr 2012 17: 48: 26 GMT,
  t_date: Mon, 02 Apr 2012 17: 48: 26 GMT,
  start: 0,
  _id: 4f79e66ad7cb8ccc1f000006
} {
  name: 'testname',
  date: Mon, 02 Apr 2012 17: 48: 29 GMT,
  t_date: Mon, 02 Apr 2012 17: 48: 29 GMT,
  start: 0,
  _id: 4f79e66dd7cb8ccc1f000007
}

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Это означает, что obj равно undefined и, следовательно, obj.name вызывает эту ошибку.

Должно быть:

 var obj = result[key];
 if (obj && typeof obj.name === 'undefined') {
    delete result[key];
 }
0 голосов
/ 03 апреля 2012

Я не уверен на 100%, почему вы используете оператор typeof, но я думаю, что вы можете упростить оператор if до простого:

if(obj === undefined)

Я также думаю, что hasOwnPropertyпроверка избыточна, не уверен, что вы там проверяете.

Я создал пример, чтобы продемонстрировать это здесь: http://jsfiddle.net/andrewferrier/RxTF8/ (просто используйте консоль браузера, чтобы увидеть результирующий объект).

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