Javascript 如何将json数组对象转换为json数组

Javascript 如何将json数组对象转换为json数组,javascript,jquery,json,angular6,lodash,Javascript,Jquery,Json,Angular6,Lodash,**情景:** 我正在使用lodash从JSON中删除空键。 但当它删除键时,它会转换对象中的数组 { "projection": "Miller", "series": [ { "mapPolygons": { "states": { "hover": { "properties": { "fill": "#67b7dc" }

**情景:**

我正在使用lodash从JSON中删除空键。 但当它删除键时,它会转换对象中的数组

{
"projection": "Miller",
"series": [
    {
        "mapPolygons": {
        "states": {
            "hover": {
                "properties": {
                    "fill": "#67b7dc"
                }
            }
        }
    },
    "heatRules": {
        "0": {
            "min": "#a82626",
            "max": "#AAAA00"              
        }
    },
    "data": {
        "0": {
            "id": "US",
            "value": 3461.37
        },
        "1": {
            "id": "DE",
            "value": 2858.09
        },
        "2": {
            "id": "NO",
            "value": 3418.87
        },
        "3": {
            "id": "ES",
            "value": 3522.46
        }
    }
}
],
 "zoomControl": {
"slider": {
    "height": 100
}
},
  "titles": {
    "0": {
    "fontSize": 20
    }
},
"homeZoomLevel": 1
}
问题:

如果您在上面的代码中看到有一个heatRules属性,它是一个数组,在转换后被转换为0的对象,同样,如果您看到数据属性,它会执行相同的操作,如果您看到titles属性,它会执行相同的操作

我使用以下链接代码删除空对象和空对象:

输入数据:

    {
"projection": "Miller",
"series": [
    {
    "mapPolygons": {
    "states": {
        "hover": {
            "properties": {
                "fill": "#67b7dc",
                "size": ""
            }
        }
    }
},
"heatRules": [
     {
        "min": "#a82626",
        "max": "#AAAA00",
         "fill": null              
    }
],
"data": [
    {
        "id": "US",
        "value": 3461.37
    },
    {
        "id": "DE",
        "value": 2858.09
    },
    {
        "id": "NO",
        "value": 3418.87
    },
    {
        "id": "ES",
        "value": 3522.46
    }
]
}
],
     "zoomControl": {
"slider": {
    "height": 100
}
},
  "titles": [
   {
    "fontSize": 20,
   "fontColor": "" 
    }
],
"homeZoomLevel": 1
}
输出数据:

{
"projection": "Miller",
"series": [
    {
    "mapPolygons": {
    "states": {
        "hover": {
            "properties": {
                "fill": "#67b7dc"
            }
        }
    }
},
"heatRules": [
     {
        "min": "#a82626",
        "max": "#AAAA00"              
    }
],
"data": [
    {
        "id": "US",
        "value": 3461.37
    },
    {
        "id": "DE",
        "value": 2858.09
    },
    {
        "id": "NO",
        "value": 3418.87
    },
    {
        "id": "ES",
        "value": 3522.46
    }
]
}
],
     "zoomControl": {
"slider": {
    "height": 100
}
},
  "titles": [
   {
    "fontSize": 20 
    }
],
"homeZoomLevel": 1
}
如果您看到上面的输出,它将从属性->大小、热值->填充中删除空键和空白键,并从标题中删除fontColor。

如果您的代码使用

typeof v==“对象”

对于数组,它将返回true

要检查数组,请使用

Array.isarray

将数组视为对象并在键上迭代将导致您的问题

递归但不处理数组的示例函数 功能移除FalsiesObj{ 返回uu.transformobj,函数o,v,k,l{ if Array.isArrayobj{ 对于obj的项目{ 删除错误项目; } 回来 } //否则不是数组。。。 } } 台阶

迭代heatRules属性,因为它是数组,所以其中可能有多个对象 迭代heatRules中每个对象的属性 删除每个值为null的属性 让数据={ 投影:米勒, 系列:[{ mapPolygons:{ 国家:{ 悬停:{ 特性:{ 填充:67b7dc, 尺寸: } } } }, 规则:[{ min:a82626, 最高:AAAA00, 填充:空 }], 数据:[{ id:美国, 价值:3461.37 }, { id:DE, 价值:2858.09 }, { id:没有, 价值:3418.87 }, { id:ES, 价值:3522.46 } ] }], 动物控制:{ 滑块:{ 身高:100 } }, 标题:[{ 尺寸:20, fontColor: }], homeZoomLevel:1 } data.series[0]。heatRules.forEachhr=>{ Object.keyshr.forEachp=>{ 如果hr[p]==null{ 删除人力资源[p] } } } console.logdata我试过了,例如,和它的工作原理。检查下面的代码

let a = {
  "projection": "Miller",
  "series": [
    {
      "mapPolygons": {
        "states": {
          "hover": {
            "properties": {
              "fill": "#67b7dc",
              "size": ""
            }
          }
        }
      },
      "heatRules": [
        {
          "min": "#a82626",
          "max": "#AAAA00",
          "fill": null
        }
      ],
      "data": [
        {
          "id": "US",
          "value": 3461.37
        },
        {
          "id": "DE",
          "value": 2858.09
        },
        {
          "id": "NO",
          "value": 3418.87
        },
        {
          "id": "ES",
          "value": 3522.46
        }
      ]
    }
  ],
  "zoomControl": {
    "slider": {
      "height": 100
    }
  },
  "titles": [
    {
      "fontSize": 20,
      "fontColor": ""
    }
  ],
  "homeZoomLevel": 1
}

removeFalses = (obj)=> {
    return _.transform(obj, function (o, v, k) {

      if (v && typeof v === 'object' && !_.isArray(v)) {

        if (v !== '') {
          o[k] = removeFalses(v);
        }

      } else if(_.isArray(v)) {
  if(!o.hasOwnProperty(k)) o[k] = [];

  //And if it is array loop through it

  _.forEach(v, function(v1, k1) {
     o[k].push(removeFalses(v1));
  });

  }else if (v === false) {
        o[k] = v;
      } else if (v) {
        o[k] = v;
      }
    });
  }

console.log(removeFalses(a)) //desired output

请分享您的输入样本数据和预期输出。@ArshpreetWadehra我提供了输入数据。@holydragon我也提供了预期输出。谢谢,@steven spungin请您在函数中更新。@Mayur我在您的问题中没有看到函数。你指的是链接的答案吗?如果是这样,我添加了一个修改,它应该处理数组中的项,而不是提供的代码。