gpt4 book ai didi

javascript - 动态遍历未知深度键的对象

转载 作者:行者123 更新时间:2023-12-04 10:56:15 24 4
gpt4 key购买 nike

我有一个奇怪的问题——可能是一个愚蠢的问题——需要一些解释,所以请耐心等待。基本上,我想知道是否有一种方法可以在不使用递归的情况下在 JavaScript 中遍历未知深度的对象。

例如,假设我有一个未知深度的对象。它可能看起来像这样:

let obj_depth2 = {
male:
{ short: 0, tall: 0 },
female:
{ short: 0, tall: 0 }
}

或者像这样:

let obj_depth3 = {
male: {
short:
{ basketball: 0, soccer: 0 },
tall:
{ basketball: 0, soccer: 0 }
},
female: {
short:
{ basketball: 0, soccer: 0 },
tall:
{ basketball: 0, soccer: 0 }
}
}

obj 也可能更深。我不会提前知道它的深度。

让我们进一步假设我将有一个看起来像这样的 arr,并且在长度上与 obj 的深度相匹配。

let arr_depth2 = ["male", "short"];

let arr_depth3 = ["male", "tall", "basketball"];

我将有一个循环,在这个循环中我生成,比如说,1,000 个 arr,然后我将使用它们将 1 添加到 obj 未知深度。所有 arr 的长度都相同(2 或 3,或更多),并且始终与 obj 的深度相匹配。但深度会发生变化,我想编写一个函数来涵盖所有情况。

明确地说,我不会遇到深度为 2 的 obj 和长度为 3 的 arr 的情况。深度和长度始终匹配一次所有 1,000 次迭代。

我的问题是这样的。有没有一种方法可以遍历 obj 以将 1 添加到我需要在不使用递归的情况下达到的“最深”键值对的值?

我可以构建这样的东西吗?

obj["male"]["short"] += 1;

尽管我知道我可以使用递归来到达obj 的底部深度,将1 添加到正确的value,并且return 它,随着递归函数继续 return 重建 obj,这意味着我必须重建 obj每次每个值并覆盖 obj 我将在上一次迭代的基础上构建,只是将 1 添加到 obj 的一部分.它只是看起来不好,但也许没关系。

提前谢谢你。

最佳答案

如果您尝试就地修改对象,您基本上可以使用指针遍历对象到您到达最后一个键的点,然后设置它。

const obj_depth3 = {
male: {
short:
{ basketball: 0, soccer: 0 },
tall:
{ basketball: 0, soccer: 0 }
},
female: {
short:
{ basketball: 0, soccer: 0 },
tall:
{ basketball: 0, soccer: 0 }
}
}

const addOneTo = (obj, path) => {
const finalProp = path.pop();
const pointer = path.reduce((pointer, key) => pointer[key], obj);
pointer[finalProp]++;
}

addOneTo(obj_depth3, ["male", "short", "soccer"])

console.log(obj_depth3);

关于javascript - 动态遍历未知深度键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59167487/

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