【发布时间】:2017-11-17 07:32:57
【问题描述】:
我有一个带有嵌套属性的 JSON 对象,如下所示:
var obj = {
"a0": {
"count": 41,
"name": "Park",
"new": {
"id": 35,
"registerid": 46
}
},
"a1": {
"count": 52,
"name": "Greg",
"old": {
"id": 38,
"registerid": 49
}
},
"a2": {
"count": 150,
"name": "Sylvain",
}
}
我想遍历整个对象并找到具有数值的属性并将它们替换为计算值,然后返回一个新对象。
所以,如果我传入上面的 JSON 对象,我想将其返回为:
result = {
"a0": {
"count": 411.067,
"name": "Park",
"new": {
"id": 351.067,
"registerid": 461.067
}
},
"a1": {
"count": 521.067,
"name": "Greg",
"old": {
"id": 381.067,
"registerid": 491.067
}
},
"a2": {
"count": 150.067,
"name": "Sylvain"
}
}
有一个类似的问题here 我之前问过它并且有一个很棒的答案,但它不处理嵌套的情况,它不会返回带有替换的整个对象,而是返回一个带有数字对象的过滤对象特性。
我尝试在 Object.keys() 上使用 forEach 并在其中调用地图,但似乎我失去了回调函数内的变量范围。
let result = Object.keys(obj).forEach(function(key, index) {
Object.keys(obj).map((key) => {
let o = obj[key];
console.log("Object is:", o);
return Object.keys(o).reduce((r, k) => typeof o[k] === 'number' ? Object.assign(r, { [k]:precise(o[k], 5) }) : r , {});
});
});
console.log(result);
谁能帮帮我。
谢谢。
【问题讨论】:
-
会不会像你的例子那样最多是双重嵌套?
-
I have a JSON object- 不,你有一个 javascript 对象,你根本没有 JSON
标签: javascript json