Javascript 如何将json数组对象转换为json数组
**情景:** 我正在使用lodash从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" }
{
"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我在您的问题中没有看到函数。你指的是链接的答案吗?如果是这样,我添加了一个修改,它应该处理数组中的项,而不是提供的代码。