使用递归到达嵌套数组项-javascript

使用递归到达嵌套数组项-javascript,javascript,recursion,Javascript,Recursion,我试图使用递归到达嵌套数组的中心。这是我试图解决的一个更大问题的一部分。我相信这个解决办法是基本的。我一直在学习JS/Webdev,我被难住了 这是我的密码: var j = [[[["hey!"]]]]; function getNested(obj) { for (var i = 0; i < obj.length; i++) { if (Array.isArray(obj[i])) { obj = obj[i]; getNested(obj)

我试图使用递归到达嵌套数组的中心。这是我试图解决的一个更大问题的一部分。我相信这个解决办法是基本的。我一直在学习JS/Webdev,我被难住了

这是我的密码:

var j = [[[["hey!"]]]];

function getNested(obj) {
for (var i = 0; i < obj.length; i++) {
    if (Array.isArray(obj[i])) {
        obj = obj[i];
        getNested(obj);
    } 
    return obj[i];
  } 
}
var j=[[[“嘿!”]];
函数getNested(obj){
对于(变量i=0;i

函数应该返回“嘿!”字符串,但我似乎无法正确理解它。

您很接近,只需将
findType(obj)
切换为
return-getNested(obj[I])
。这将为您提供一个递归函数,该函数深入到数组中,直到数组中的项不是另一个数组为止。另外,考虑到您的示例输入,for循环是不必要的

如果嵌套数组正好有一个元素,则这将只起作用。其他人在评论中表达了这一点

var j = [[[["hey!"]]]];

function getNested(obj) {
    if (Array.isArray(obj)) {
        return getNested(obj[0]);
    } 
    return obj;
}

var str = getNested(j);
console.log(str); // "hey!"

您很接近了,只需将
findType(obj)
切换为
返回getNested(obj[i])
。这将为您提供一个递归函数,该函数深入到数组中,直到数组中的项不是另一个数组为止。另外,考虑到您的示例输入,for循环是不必要的

如果嵌套数组正好有一个元素,则这将只起作用。其他人在评论中表达了这一点

var j = [[[["hey!"]]]];

function getNested(obj) {
    if (Array.isArray(obj)) {
        return getNested(obj[0]);
    } 
    return obj;
}

var str = getNested(j);
console.log(str); // "hey!"

不需要递归,一个简单的while循环就可以了

var j = [[[["hey!"]]]];

function getNested(obj) {
    while (Array.isArray(obj)) { obj = obj[0]; } 
    return obj;
}

var str = getNested(j);
console.log(str); // "hey!"
递归实现有一个很好的特性,即它是纯功能性的,但如果您这样重写它:

var j = [[[["hey!"]]]];

function getNested(obj) {
    return Array.isArray(obj)? getNested(obj[0]): obj;
}

var str = getNested(j);
console.log(str); // "hey!"

尽管如此,它的性能还是会更差。

不需要递归,一个简单的while循环已经可以做到这一点

var j = [[[["hey!"]]]];

function getNested(obj) {
    while (Array.isArray(obj)) { obj = obj[0]; } 
    return obj;
}

var str = getNested(j);
console.log(str); // "hey!"
递归实现有一个很好的特性,即它是纯功能性的,但如果您这样重写它:

var j = [[[["hey!"]]]];

function getNested(obj) {
    return Array.isArray(obj)? getNested(obj[0]): obj;
}

var str = getNested(j);
console.log(str); // "hey!"

尽管如此,它的性能还是会更差。

如果只找到第一个最内层的嵌套元素并返回它,为什么会有一个
for
循环?您的代码是如何递归的?如果在任何嵌套数组中有多个元素该怎么办?我看不到一个地方有
getNested
调用自己,无论是直接调用还是通过相互递归调用。什么是
findType
?如果您正在寻找递归,请将该行切换为
returngetnested(obj)
我在代码中看不到递归。getNested()应该在某个地方调用自己。例如,如果您的数组看起来像[“hey1”]、[[“hey!”、“hey2”]]],该怎么办?应该返回什么?如果只找到第一个最内层的嵌套元素并返回它,为什么会有一个
for
循环?您的代码是如何递归的?如果在任何嵌套数组中有多个元素该怎么办?我看不到一个地方有
getNested
调用自己,无论是直接调用还是通过相互递归调用。什么是
findType
?如果您正在寻找递归,请将该行切换为
returngetnested(obj)
我在代码中看不到递归。getNested()应该在某个地方调用自己。例如,如果您的数组看起来像[“hey1”]、[[“hey!”、“hey2”]]],该怎么办?应该返回什么?它使用循环而不是递归。因此,对于深度嵌套的数组,它应该表现得更好。可能您应该编写,而不需要递归递归递归解决方案的唯一优点是,它可以以更压缩的方式编写,如:函数getNested(obj){return Array.isArray(obj)→getNested(obj[0]):obj;}但它的性能会更差。它使用循环而不是递归。因此,对于深度嵌套的数组,它的性能应该明显更好。可能您应该编写,而不需要递归递归递归解决方案的唯一优点是它可以以更压缩的方式编写,如:函数getNested(obj){return Array.isArray(obj)→getNested(obj[0]):obj;}但其性能会更差。