我目前正在接收一个严重嵌套的Web api JSON响应,我想对其进行重组以仅提取所需的数据并使之更简单。
我该如何在Angular 2 + / Typescript中做到这一点?
任何帮助将不胜感激。
说我有这样的东西:
"O1": {
"P1": "Something",
"A1": [{
"P2": "Something",
"A2": [{
"P3": "Something"
}]
}]
"P4": "Something"
}
我想将其重组为:
"O1": {
"P1": "Something",
"P2": "Something",
"P3": "Something"
}
我可以在构造函数的类中重建模型吗?如果是这样,我到目前为止还无法在线找到任何东西。
让我知道是否需要提供更多信息。
谢谢
答案 0 :(得分:0)
在github中找到以下代码段: https://gist.github.com/penguinboy/762197
var flattenObject = function(ob) {
var toReturn = {};
for (var i in ob) {
if (!ob.hasOwnProperty(i)) continue;
if ((typeof ob[i]) == 'object') {
var flatObject = flattenObject(ob[i]);
for (var x in flatObject) {
if (!flatObject.hasOwnProperty(x)) continue;
toReturn[i + '.' + x] = flatObject[x];
}
} else {
toReturn[i] = ob[i];
}
}
return toReturn;
}
答案 1 :(得分:0)
让我们使用snippet which was proposed展平初始对象。然后我们可以过滤需要包含在最终对象中的那些属性:
function filterObj(obj: any, propsForFilter: string[]) {
const result = {};
for (let prop in obj) {
const filteredProp = propsForFilter.find(p => prop.includes(p));
if (filteredProp) {
result[filteredProp] = obj[prop];
}
}
return result;
}
const flattened = flattenObject(obj);
console.log(flattened, filterObj(flattened, ['P1', 'P2']));
此方法filterObj
接受属性数组,以便将它们包括在最终结果中。希望对您有帮助。