【问题标题】:How to change an object's property from function如何从函数中更改对象的属性
【发布时间】:2015-12-16 15:29:01
【问题描述】:

我有以下函数,它将具有可变深度的最深值的对象重置为 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 声明?找到第一个数字后,它会停止循环。如果您不希望发生递归调用,只需将其删除并使用else
  • 好的。我会尽力。我刚刚编辑了我的问题以使其更清楚。
  • 谢谢。这有帮助。

标签: javascript node.js recursion pass-by-reference


【解决方案1】:

问题在于“return;”从函数返回,因此只改变了第一项。这是一个小提琴:

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

【讨论】:

  • 感谢您的帮助。完美运行。
猜你喜欢
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
相关资源
最近更新 更多