JavaScript / Underscore.js - 动态地从嵌套对象

时间:2016-03-29 04:33:47

标签: javascript nested underscore.js

考虑以下JavaScript对象:

{
"moe": {
    "25-34": {
        "female": {
            "foo": 1747600,
            "bar": 0.17625997236482466
        },
        "male": {
            "foo": 1002100,
            "bar": 0.10107010660722751
        }
    },
    "18-24": {
        "female": {
            "foo": 1104200,
            "bar": 0.11136773946282867
        },
        "male": {
            "foo": 735800,
            "bar": 0.07421154020716296
        }
    }
},
"larry": {
    "18-24": {
        "male": {
            "foo": 2229400,
            "bar": 0.23708698010272988
        },
        "female": {
            "foo": 743800,
            "bar": 0.07909989046398605
        }
    },
    "25-34": {
        "male": {
            "foo": 2092200,
            "bar": 0.22249635766167197
        },
        "female": {
            "foo": 852500,
            "bar": 0.09065966203354142
        }
    },

}

我需要减去每个" bar"来自拉里的萌的价值,反之亦然 - 这并不重要。每个" stooge"节点将始终具有相同的属性,例如但是,18-24,foo,bar等子项目(18-24等)的数量会有所不同,因此无法进行硬编码。 stooge名称也总是不同。

有人可以建议我如何动态地将一个对象的条形值减去另一个对象吗?

更新:总会有2个具有完全相同子属性的stooges。

1 个答案:

答案 0 :(得分:0)

使用嵌套循环。

var names = Object.keys(json_obj);
var stooge1 = json_obj[names[0]];
var stooge2 = json_obj[names[1]];

for (var age in stooge1) {
    for (var gender in stooge1[age]) {
        stooge2[age][gender].bar -= stooge1[age][gender].bar;
    }
}