【发布时间】:2020-12-22 10:00:36
【问题描述】:
我正在尝试重置在递归 forEach 循环中使用的(文件公共)计数器。
基本上,下面的代码检查最里面的键值对的长度,其中:
length = (key length) + (some strings inserted) + (key value)
var container = ''
var length = 0
function getUpdatedLengthOfInnerMostObjects (obj) {
Object.keys(obj).forEach(k => {
if (typeof obj[k] === 'object') {
getUpdatedLengthOfInnerMostObjects(obj[k])
} else {
container = k + someFunc(obj[k]) + obj[k]
length += container.length
}
})
return length
}
const sampleObj = {
"key1": {
"key2": {
"key3": {
"key4a": {
"key5a": "value5a"
},
"key4b": {
"key5b": "value5b"
},
"key4c": {
"key5c": "value5c"
},
"key4d": {
"key5d": "value5d"
}
}
}
}
}
function someFunc (obj) {
// Some string manipulation here to return variable length, just returning static for simplicity of this example
return 'xxx'
}
console.log('length 1st try = ' + getUpdatedLengthOfInnerMostObjects(sampleObj))
console.log('length 2nd try = ' + getUpdatedLengthOfInnerMostObjects(sampleObj))
所以得到长度的字符串是:
key5axxxvalue5akey5bxxxvalue5bkey5cxxxvalue5ckey5dxxxvalue5d
它的长度为 60 和 120。我需要它来输出 60 和 60。
"length 1st try = 60"
"length 2nd try = 120"
但不知道怎么做。当我在 getUpdatedLengthOfInnerMostObjects() 中的 return 语句之前添加它时,它总是只返回 0。
const tempLength = length
length = 0
return tempLength
我在这里错过了什么??
在这里提琴: https://jsfiddle.net/keechan/cs3prmLx/
救命!
【问题讨论】:
-
停止使用全局变量,只使用局部变量和
return值。那么它需要看起来如何? -
@Bergi 任何建议如何转换为使用局部变量?请注意,这是一个递归循环..
-
不是真的,我不明白
length目前是如何使用的。您需要编写只有参数和返回值的递归函数。
标签: javascript node.js object