我有一个如下的数组:
["this", "is", ["a", ["nested", "array", "I"], "want", "to"], "split"]
我想要一个函数来获取两个像这样的数组:
["this", "is", ["a", ["nested", "ar"]]] [[["ray", "I"], "want", "to"], "split"]
最好情况下,我希望这个函数的参数是初始数组、目标字符串和偏移量。所以在这里,它将是 recurSplit(foo, foo[2][1][1], 2)
。但我也欢迎其他解决方案。
我已经制作了这个可行的解决方案,但是我并不满意,因为我的hasCut
变量需要在函数外部。我想知道在函数内部如何判断我是在目标的左侧(或右侧)。
let hasCut = false
function recurSplit(element, target, offset) {
let left, right
if (typeof element == 'string') {
if (element == target) {
left = element.slice(0, offset)
right = element.slice(offset)
hasCut = true
} else {
left = hasCut ? false : element
right = hasCut ? element : false
}
} else {
left = []
right = []
for (const child of element) {
const res = recurSplit(child, target, offset)
if (res[0])
left.push(res[0])
if (res[1])
right.push(res[1])
}
}
return [left, right]
}
- 是的,我可以创建另一个递归检查它的函数,但那将是无用的处理。
- 是的,我可以将此函数设置为匿名函数并封装在另一个函数中,但那很特定于JS。
难道没有更好的方法吗?
谢谢!
context
或state
参数,其默认值为{hasCut: false}
,并将其随递归调用一起传递,在函数内部更改该对象的值,而不是外部变量的值。 - Trevor Dixon