1

我正在尝试使用递归到达嵌套数组的中心。这是我试图解决的一个更大问题的一部分。我确信解决方案有点初级。我一直在学习 JS/web 开发,我很难过。

这是我的代码:

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];
  } 
}

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

4

2 回答 2

3

你很接近,只需关闭findType(obj)for 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!"

jsFiddle Demo

于 2013-09-28T20:28:26.387 回答
2

不需要递归,一个简单的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!"

尽管如此,它的性能仍然会更差。

于 2013-09-28T21:24:57.497 回答