在javascript中从对象中删除属性

时间:2012-04-02 20:56:07

标签: javascript loops

我正在循环浏览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 个答案:

答案 0 :(得分:6)

这意味着objundefined,因此obj.name会导致此错误。

应该是:

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

答案 1 :(得分:-1)

我不是100%肯定你为什么在那里使用typeof运算符,但我认为你可以简单地简化if语句:

if(obj === undefined)

我还认为hasOwnProperty检查是多余的,不确定你要检查的是什么。

我在这里创建了一个示例来演示:http://jsfiddle.net/andrewferrier/RxTF8/(只需使用浏览器控制台查看结果对象)。