gpt4 book ai didi

javascript - 递归删除嵌套json对象中包含空数组的对象

转载 作者:行者123 更新时间:2023-11-30 11:54:49 25 4
gpt4 key购买 nike

我想动态删除包含空数组的 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]}]},代码工作正常。

但是当我有这个对象时:

{"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","参数":[1,2,3]}]}

显然它不会动态删除“op”为“2-1”的json obj。

那么如何使用纯 javascript 以优雅的方式解决它呢?

最佳答案

你可以使用 breadth first算法,它首先在深度中查找,然后在必要时删除。

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);

关于javascript - 递归删除嵌套json对象中包含空数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38323357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com