javascript - 遍历在nodeJs中具有嵌套对象的对象

标签 javascript node.js object underscore.js

我有一个包含多个嵌套对象的 javascript 对象,如下所示:

 var stats = {
     bookServed: {
         redis: 90,
         s3: 90,
         signedUrl: 70
     },
     errors: {
         redis: {
             bookService: 70,
             mapi: 50,
             capi: 30
         },
         AWS: {
             signedUrl: 70,
             downloadBook: 50,
             searchBook: 10
         },
         decryption: 60
     }
 };

什么是遍历其所有属性并将每个值设置为例如 0 的最简洁方法。我写了这样的东西

 for (var property in stats) {
     if (stats.hasOwnProperty(property)) {
         if (typeof property === "object") {
             for (var sub_property in property)
                 if (property.hasOwnProperty(sub_property)) {
                     sub_property = 0
                 }
         } else {
             property = 0;
         }
     }
 }

我愿意使用像 underscore.js 这样的库来正确地完成任务。

最佳答案

相对简单的递归问题,我会使用一个在找到子对象时调用自身的函数。我也会避免使用 for in 循环,而是在对象的键上使用 forEach(它更快,并且不需要 hasOwnProperty 检查。)

function resetValuesToZero (obj) {
    Object.keys(obj).forEach(function (key) {
        if (typeof obj[key] === 'object') {
            return resetValuesToZero(obj[key]);
        }
        obj[key] = 0;
    });
}

var stats = {
     bookServed: {
         redis: 90,
         s3: 90,
         signedUrl: 70
     },
     errors: {
         redis: {
             bookService: 70,
             mapi: 50,
             capi: 30
         },
         AWS: {
             signedUrl: 70,
             downloadBook: 50,
             searchBook: 10
         },
         decryption: 60
     }
 };

console.log(stats.errors.AWS.signedUrl); // 70
resetValuesToZero(stats);
console.log(stats.errors.AWS.signedUrl); // 0

关于javascript - 遍历在nodeJs中具有嵌套对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112450/

相关文章:

javascript - 如何将其应用到 jquerymobile 中的所有页面

javascript - 当错误消息是一个对象时,如何在 javascript 中创建一个新的错误

javascript - ReactJS 与 NodeJS - 为什么我需要创建两者?

javascript - Object.length 在 javascript 中未定义

javascript - 数组转换为字符串

javascript - JS使用扩展运算符克隆对象并更改一个字段

javascript - 获取动态创建的文本

javascript - 在javascript中创建对象时如何动态提供字段名?

node.js - 长时间运行的 Node.js 进程在运行几天后会变慢

javascript - 在 Javascript 中创建对象期间如何引用键?