【发布时间】:2010-05-29 16:10:56
【问题描述】:
在这个递归函数中,我想替换(嵌套)对象中的一个值。
var testobj = {
'user': {
'name': 'Mario',
'password': 'itseme'
}
};
updateObject('emesti', 'password', testobj)
function updateObject(_value, _property, _object) {
for(var property in _object) {
if(property == _property) {
_object[property] = _value;
}
else if(objectSize(_object) > 0) {
updateObject(_value, _property, _object[property]);
}
}
return _object
};
function objectSize(_object) {
var size = 0, key;
for (key in _object) {
if (_object.hasOwnProperty(key)) size++;
}
return size;
};
运行后,firefox 会在 else if(objectSize(_object) > 0) { 行抛出异常“递归过多”。
编辑: 如果我设置
function updateObject(_value, _property, _object) {
for(var property in _object) {
if(property == _property) {
_object[property] = _value;
}
else if(_object[property].hasOwnProperty(_property)) {
updateObject(_value, _property, _object[property]);
}
}
return _object
};
它有效,但它只搜索一个级别。如果我在嵌套对象中有一个嵌套对象,它就不会工作。
还有什么想法吗?
编辑: 此问题出现在 Firefox 3.6 中。它在 Chrome 中工作。
【问题讨论】:
-
天哪。你混合了_property 和property?亲爱的上帝,请重命名它们。
-
:rolleyes: .. 哦,老论坛时代...
标签: javascript recursion