递归删除嵌套 json 对象中包含空数组的对象
Recursively remove object which contains empty array in nest json object
我想动态删除包含空数组的json对象。我在这里找到了这个链接类似的问题。但就我而言,它对我不起作用。
假设我有一个 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以优雅的方式解决它呢?
你可以使用广度优先算法,它首先查看深度,然后在必要时删除。
function isNotEmpty(object) {
if (Array.isArray(object.parameters)) {
object.parameters = object.parameters.filter(isNotEmpty);
return object.parameters.length;
}
return true;
}
var object = { "op": "1", "parameters": [{ "op": "2-1", "parameters": [{ "op": "3-1", "parameters": [] }] }, { "op": "2-2", "parameters": [1, 2, 3] }] };
isNotEmpty(object);
console.log(object);
相关文章:
- 如何访问对象内部的“categoryIds”字段/键,该对象包含mongodb's `ObjectId(s)`数
- Spring Ajax列表返回,但对象为空
- HTML提交表单,同时包含空字段检查和按钮隐藏
- 传递给函数时对象为空的 JavaScript 数组
- Kinect V2 javascript joints 对象为空
- Angular Meteor教程ng包含空
- IE8对象当对象包含null值时应出现错误
- app.use(restify.bodyParser())无法工作,因为req对象为空
- 实际的angular js控制器对象包含什么
- Protobuf:WebApi->JS-解码对象为空
- 如何删除angularjs中对象的空值
- 翻转操作数时,添加带有空对象的空数组会产生不同的结果
- 奇怪的日期()是用包含空字节的字符串创建的
- 'innerHTML':对象为空或未定义
- 包含空字符串的 HTML 属性不显示 = 运算符
- 检查 javascript 数组是否不仅包含空值
- 使用 GWT 将双精度 JS 数组(可能包含空条目)集成到 Java 对象的适当方法
- 如何递归地移除包含空数组的嵌套对象
- 如何在JSON对象中包含空值作为占位符
- 递归删除嵌套 json 对象中包含空数组的对象