Javascript 如何更改对象';函数的s属性

Javascript 如何更改对象';函数的s属性,javascript,node.js,recursion,pass-by-reference,Javascript,Node.js,Recursion,Pass By Reference,我有以下函数,它将具有可变深度的最深值的对象重置为0。我希望函数更改函数范围外对象的属性 var object = { '1': { '10000': { '0': 6, '15': 3, '35': 5, '55': 3, '75': 85 }, } } function resetCounts(obj) { for (var el in obj) {

我有以下函数,它将具有可变深度的最深值的对象重置为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
对象的预期结果是:

        { '1': {
                '10000': { '0': 0, '15': 0, '35': 0, '55': 0, '75': 0 },
            }
        } 
你知道如何做到这一点吗?如何将值传递给父对象?

问题是“return;”从函数返回,因此只保留第一项更改。这是一把小提琴:

所以你知道,使用lodash,如果你只是在那里有计数,你不必重设深数,你可以重设每个标签,只要这样:

_.each(counts, function(v,k){ counts[k] = 0; });

为什么有一个
return
语句?在找到第一个数字后,它将停止循环。如果不希望发生递归调用,只需删除它并使用
else
。好的。我试试看。我刚刚编辑了我的问题,让它更清楚一点。谢谢。那很有帮助。谢谢你的帮助。工作完美。
_.each(counts, function(v,k){ counts[k] = 0; });