gpt4 book ai didi

javascript - 在循环递归期间,索引计数丢失

转载 作者:行者123 更新时间:2023-11-28 13:06:18 25 4
gpt4 key购买 nike

目标:

我正在使用 AngularJS 和 Lodash 开发一个应用程序。我需要一个执行以下转换的函数:

来自

{
a: 0,
b: {x: {y: 1, z: 2}},
c: 3
}

进入

{
a: 0,
'b.x.y': 1,
'b.x.z': 2,
c: 3
}

现在,我正在使用递归函数来遍历对象。目前,我的代码看起来像这样(不完整):

            var obj = {},
keys, property, value;

var recur = function (mat) {

keys = Object.keys(mat);

for (var i = 0; i < keys.length; i++) {
property = keys[i];
value = mat[property];

if (isObj(value)) {
//debugger;
recur(value);


} else {
obj[property] = value;
}
}
}
recur({
a: 0,
b: {x: {y: 1, z: 2}},
c: 3
});

console.log(obj);

function isObj(value) {
return typeof value === "object";
}

我在调试时遇到的一个问题是:

i 没有增加;在最高层递归调用期间,i 保持为 0。

有人知道为什么吗?如果您知道进行此转换的任何其他方法,请分享。

亲切的问候。

最佳答案

这是因为 keys 在错误的范围内声明。它应该在内部recur声明。因为事实并非如此,当 recur 递归时,keys 会被覆盖。

这并不会使 i 不会增加,但这确实意味着您的循环将在令人惊讶的时间终止,因为 key 在递归时会发生变化。

propertyvalue 也应该在 recur 中声明;一般来说,尽可能在最里面的作用域中声明变量。 (temp 根本不需要声明,因为您从不使用它。)

为了得到你的最终结果,显然你必须改变的不仅仅是这些,但你说代码不完整。这是循环无法正常工作的问题。

关于javascript - 在循环递归期间,索引计数丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46191752/

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