如何从函数更改对象的 属性

How to change an object's property from function

我有以下函数,可将具有可变深度的对象的最深值重置为 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 },
            }
        } 

知道如何实现吗?如何将值传递给父对象?

问题是"return;"那个returns的函数,从而只留下第一项改变了。这是 fiddle:

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; });