2

我目前正在接收一个高度嵌套的 web api JSON 响应,我想对其进行重构,只提取我需要的数据并使其更简单。

我将如何在 Angular 2+/Typescript 中执行此操作?

任何帮助将非常感激。

说我有这样的事情:

"O1": {
    "P1": "Something",
    "A1": [{
       "P2": "Something",
       "A2": [{
         "P3": "Something"
        }]
    }]
    "P4": "Something"
}

我想将其重组为:

"O1": {
    "P1": "Something",
    "P2": "Something",
    "P3": "Something"
}

我可以在构造函数的类中重建模型吗?如果是这样,我还没有在网上找到任何东西。

如果我需要提供任何进一步的信息,请告诉我。

谢谢

4

2 回答 2

0

让我们使用建议的代码片段来展平初始对象。然后我们可以过滤那些我们需要包含在最终对象中的属性:

 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接受属性数组,以便将它们包含在最终结果中。希望这对您有所帮助。

于 2018-08-26T17:49:33.877 回答
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;
}
于 2018-08-26T13:52:29.220 回答