我有以下函数将具有可变深度的最深值的对象重置为0.我希望函数在函数范围之外更改对象的属性;
var object =
{ '1': {
'10000': { '0': 6, '15': 3, '35': 5, '55': 3, '75': 85 },
}
}
function resetCounts(obj) {
for (var el in obj) {
if (obj.hasOwnProperty(el)) {
if (typeof obj[el] == 'number') {
if (obj[el] > 0) {
console.log(obj)
console.log(obj[el]);
obj[el] = 0;
console.log('reset');
console.log(obj);
console.log(obj[el]);
}
return;
}
resetCounts(obj[el]);
}
}
}
resetCounts(object);
以下是控制台中的结果:
{ '0': 6, '15': 3, '35': 5, '55': 3, '75': 85 }
6
reset
{ '0': 0, '15': 3, '35': 5, '55': 3, '75': 85 }
0
预期结果是object
为:
{ '1': {
'10000': { '0': 0, '15': 0, '35': 0, '55': 0, '75': 0 },
}
}
知道如何实现这一目标吗?如何将值传递给父对象?
答案 0 :(得分:2)
问题是“回归”;从函数返回,从而只保留第一个项目。这是一个小提琴:
https://jsfiddle.net/mckinleymedia/rbf26hcw/
function resetCounts(obj) {
for (var el in obj) {
if (obj.hasOwnProperty(el)) {
if (typeof obj[el] == 'number') {
if (obj[el] > 0) {
obj[el] = 0;
}
}
obj[el] = resetCounts(obj[el]);
}
}
return obj;
};
var counts = { '0': 6, '15': 3, '35': 5, '55': 3, '75': 85 };
console.log(counts);
counts = resetCounts(counts);
console.log(counts);
所以你知道,使用lodash,如果你在那里得到了计数并且你不需要重置深数字,你可以用这个重置每个标签:
_.each(counts, function(v,k){ counts[k] = 0; });