【发布时间】:2016-07-12 16:50:14
【问题描述】:
我想动态删除包含空数组的 json 对象。我找到了这个链接similar question here。但就我而言,它对我不起作用。
假设我有一个 JSON 对象:
{"op":"1","parameters":[{"op":"2-1","parameters":[]},{"op":"2-2","parameters":[1,2]}]}
我已经编写了一个示例代码来递归地做这些事情:
function removeEmptyArray(cJSON){
if(!cJSON)
return cJSON;
for(var i=cJSON.parameters.length-1;i>=0;i--){
if(!(cJSON.parameters[i].parameters instanceof Array))
continue;
if(cJSON.parameters[i].parameters.length==0){
cJSON.parameters.splice(i,1);
}else{
cJSON.parameters[i] = removeEmptyArray(cJSON.parameters[i]);
}
}
return cJSON;
}
预期结果是{"op":"1","parameters":[{"op":"2-2","parameters":[1,2]}]},代码运行良好。
但是当我有这个 obj 时:
{"op":"1","parameters":[{"op":"2-1","parameters":[{"op":"3-1","parameters":[]}]},{"op":"2-2","parameters":[1,2,3]}]}
输出是{"op":"1","parameters":[{"op":"2-1","parameters":[]},{"op":"2-2","parameters":[1,2,3]}]}
显然它不会动态删除“op”为“2-1”的json obj。
那么如何使用纯 javascript 以优雅的方式解决它?
【问题讨论】:
-
你的结构的可能深度是多少?是无限期的吗?您是否尝试实现树状结构
-
@Rouz 深度未知,但不是无限的。
-
@Sunson 那么可以在同一级别上存在元素吗?如果删除一个节点,子节点会发生什么?
-
@Rouz 如果我删除一个节点,只是因为它没有子节点,即数组为空。问题中已经给出了示例
标签: javascript json