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

时间:2013-09-28 20:21:35

标签: javascript recursion

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

这是我的代码:

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

该功能应该返回'嘿!'字符串,但我似乎无法把它弄好。

2 个答案:

答案 0 :(得分:2)

您已离婚,只需为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!"

jsFiddle Demo

答案 1 :(得分:1)

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

但它的表现仍然会更差。