gpt4 book ai didi

javascript - 获取 JSON 对象内元素的路径

转载 作者:行者123 更新时间:2023-12-01 00:39:39 25 4
gpt4 key购买 nike

我有一个如下所示的对象:

[
{
"uid": "aaa-aaa",
"name": "foo",
"children": []
},
{
"uid": "aaa-bbb",
"name": "bar",
"children": [
{
"uid": "aaa-bbc",
"name": "baz",
"children": []
},
{
"uid": "aaa-ccc",
"name": "fooz",
"children": [
{
"uid": "aaa-bcb",
"name": "Yeah !",
"children": []
}
]
}
]
}
]

我正在尝试编写一个函数,该函数将该对象的 uid 作为参数,并返回该对象中具有 uid 的元素的路径(或 null(如果未找到)。

类似这样的事情:

> getElementPath(bigObject, 'aaa-bcb')
[1, "children", 1, "children", 0]
or
> getElementPath(bigObject, 'aaa-bcb')
[1, 1, 0]

我知道该函数必须是递归的,因为嵌套级别不应受到限制。我已经尝试过,但它总是返回 null :

function getElementPath (haystack, uid, currentPath = []) {
if (haystack.uid === uid) {
return currentPath
}
if (Array.isArray(haystack.children)) {
for (let i = 0; i < haystack.children.length; i++) {
let newPath = [...currentPath, i]
let path = getElementPath(haystack.children[i], uid, newPath)
if (path !== null) {
return path
}
}
}
return null
}

最佳答案

我会使用平面

展平对象,然后循环遍历对象键,直到找到具有适当值的键。一旦找到它,关键就是路径。

https://www.npmjs.com/package/flat

我的(简单而快速)的实现看起来像这样。但我不喜欢它的是它知道查看“children”属性,如果数据结构定义良好并且不经常更改就很好,扁平无论您是否更改数据结构,这个想法都会起作用。

getPathForUid = (uid,obj,thisPath = []) => {

if(Array.isArray(obj)) {
return obj.reduce((acc,item,idx) => getPathForUid(uid,item,thisPath.concat(idx)),[]);
}

return obj.uid === uid ? thisPath : getPathForUid(uid,obj.children,thisPath.concat('children'));

}

关于javascript - 获取 JSON 对象内元素的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807308/

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