gpt4 book ai didi

javascript - 使用 JavaScript 中的递归查找嵌套数组中最长的字符串?

转载 作者:行者123 更新时间:2023-11-28 12:58:03 24 4
gpt4 key购买 nike

我已经看到了各种答案,它们提供了查找数组中最长字符串的解决方案。我的问题是,我想找到嵌套数组中最长的字符串。嵌套级别可以是 N 层,也可以是两层。我初步的解决方案如下:

    let myArray = [
'ABC',
'ABCD',
'ABCDE',
[
'ABC',
'ABCABABA',
[
'ABABABABABABABABAZZ'
],
'ABCABABASS',

],
'ABCDEFGH',
'ABABABABZZQ'
]

function longestString(arr) {
let longestStr = ''
arr.forEach(item => {
if(typeof item === 'string') {
if(item.length > longestStr.length) {
longestStr = item;
console.log('Longest Item', item);
}
} else {
longestString(item)
}
})
return longestStr;
}

console.log(longestString(myArray))

观察到的输出 -> ABABABABZZQ

预期输出 -> 'ABABABABABABABABAZZ'

仅打印最长的字符串需要进行哪些调整?

最佳答案

您需要使用递归调用的返回值 - 将返回的字符串放入与 item 相同的测试中,检查它是否比 longestStr 长,如果是,则重新分配 longestStr:

let myArray = [
'ABC',
'ABCD',
'ABCDE', [
'ABC',
'ABCABABA', [
'ABABABABABABABABAZZ'
],
'ABCABABASS',

],
'ABCDEFGH',
'ABABABABZZQ'
]

function longestString(arr) {
let longestStr = ''
arr.forEach(item => {
if (typeof item === 'string') {
if (item.length > longestStr.length) {
longestStr = item;
}
} else {
const nestedLongest = longestString(item);
if (nestedLongest.length > longestStr.length) {
longestStr = nestedLongest;
}
}
})
return longestStr;
}

console.log(longestString(myArray))

或者,更干一点:

const myArray=['ABC','ABCD','ABCDE',['ABC','ABCABABA',['ABABABABABABABABAZZ'],'ABCABABASS',],'ABCDEFGH','ABABABABZZQ']

function longestString(arr) {
let longestStr = '';
const check = str => {
if (str.length > longestStr.length) longestStr = str;
};
arr.forEach(item => {
check(typeof item === 'string' ? item : longestString(item));
});
return longestStr;
}

console.log(longestString(myArray))

另一种选择是调用一个内部函数,同时分配一个 longestStr 变量,该变量一直在作用域内,直到 longestString 函数结束 - 这意味着您不必担心递归调用的结果:

const myArray=['ABC','ABCD','ABCDE',['ABC','ABCABABA',['ABABABABABABABABAZZ'],'ABCABABASS',],'ABCDEFGH','ABABABABZZQ']

function longestString(input) {
let longestStr = '';
const check = str => {
if (str.length > longestStr.length) longestStr = str;
};
function recursiveFn(arr) {
arr.forEach((item) => {
if (typeof item === 'string') check(item)
else recursiveFn(item);
});
}
recursiveFn(input);
return longestStr;
}

console.log(longestString(myArray))

关于javascript - 使用 JavaScript 中的递归查找嵌套数组中最长的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53246122/

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