我正在循环浏览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
}
答案 0 :(得分:6)
这意味着obj
为undefined
,因此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/(只需使用浏览器控制台查看结果对象)。