首页 > 解决方案 > 仅展平嵌套的 JSON 二级

问题描述

我的 JSON 结构是这样的

var data = var data = [{"id": 451, "title": {    "rendered": "title1" }, "acf": {    "floor": "6",    "business": [       "business"    ],    "status": {       "value": "null",       "label": "Määramata"    },    "suund": "",    "area": {       "value": "full",       "label": "Terve korrus"       },       "suurus": "",       "tookohad": "",    }, },]; 

我需要展平 acf 才能在没有 acf 嵌套的情况下得到它。

var data = [
  {
"id": 451,
"title": {
   "rendered": "Title 1"
},
   "floor": "6",
   "business": [
      "business"
   ],
   "status": {
      "value": "null",
      "label": "Määramata"
   },
   "suund": "",
   "area": {
      "value": "full",
      "label": "Full"
      },
      "size": "",
},
];

我尝试使用此功能

function flat(source, target) {
Object.keys(source).forEach(function (k) {
    if (source[k]!== null && typeof source[k] === 'object') {
        flat(source[k], target);
        return;
    }
    target[k] = source[k];
});flatObject = {};flat(data, flatObject);console.log(flatObject);

但它会使一切变平。我需要从 acf 中挑选东西,但将带有 id 的元素分开。

标签: javascriptjsonflatten

解决方案


您可以执行以下操作:

const flattenData = {
  ...data,
  acf: undefined,
  ...data.acf
};
delete flattenData['acf'];

此方法链接一些解构分配。首先——...data我们复制第一层的所有数据。然后在我们用 覆盖的新对象acfundefined。这减少了内存占用。最后我们覆盖/复制 的完整对象data.acf,从而以您想要的方式展平数组。

如果您可以使用acf: undefined数组中的 ,则可以删除delete flattenData['acf']并使其更快一些。


推荐阅读