javascript - 如何将特定的 Json 部分作为独立对象返回?
问题描述
我有如下所示的 Json 对象:
{
id : 0,
cnt: 1,
someStuff : 'lalala',
1: {
id : 1,
cnt: 2,
someStuff : 'allgood',
1: {
id : 2,
cnt: 0,
someStuff: 'nice'
},
2: {
id : 3,
cnt : 0,
someStuff: 'nice2'
}
}
}
而我想要做的就是将此 Json 的某些部分作为独立对象返回。如果我使用此功能:
function CurrentNodeReturn(obj, idReturn) {
if (idReturn == 0) { return obj; }
for (var i = 1; i < obj.cnt + 1; i++) {
if (obj[i].id == idReturn) {
return obj[i];
} else {
return CurrentNodeReturn(obj[i], idReturn);
}
}
}
我可以得到与 Id = 0 发送的相同对象。我也可以使用 ids 1 和 2 获取分离的对象。但是当我需要获取 id = 3 的对象时,我得到的只是控制台日志中的“未定义”错误。那么,如果每次我用参数调用 CurrentNodeReturn 函数(我提到的所有主要对象,节点的 id 应该返回到起始调用点),我该如何改进函数的算法呢?
解决方案
如果每次调用带参数的 CurrentNodeReturn 函数时,如何改进函数的算法?
首先,您应该更改停止条件以检查 id 是否匹配或对象是否未定义。
否则,如果您不满足停止条件,则循环遍历子项并递归调用您的函数,如果不满足则返回值undefined
。
const data = { id : 0, cnt: 1, someStuff: 'lalala', 1: { id : 1, cnt: 2, someStuff: 'allgood', 1: { id : 2, cnt: 0, someStuff: 'nice' }, 2: { id : 3, cnt : 0, someStuff: 'nice2' } } };
function getObject(obj, id) {
if (!obj || obj.id === id) {
return obj;
}
for (let i = 0; i < obj.cnt; i++) {
const child = getObject(obj[i + 1], id);
if (child) {
return child;
}
}
}
console.log(getObject(data, 2))
console.log(getObject(data, 3))
推荐阅读
- amazon-web-services - 对 AWS S3 存储桶的访问受限
- c# - 在服务器上使用 C# 打印文件
- c# - 从列表中生成 xml 文件在 mvc C# 中预定义的模式
- python - 在 Python Click 中对帮助输出进行分类
- javascript - JavaScript 中的一等函数和 C++ 中的函数声明
- qt - 有没有办法用QML TextEdit 的 selectedText 属性中的替代文本替换标签
- r - 选择表中的行,然后提取键并在另一个表中搜索并在 R 中显示行闪亮
- typescript - TypeScript 编译器 API 获取映射属性的类型
- python - 在发布 API 之前休眠 X 秒 - Python
- .net-core - 具有 IPEndPoint 的 TcpClient 失败,但具有相同 IPEndPoint.Address 的 TcpClient 没有?