我正在尝试使用递归到达嵌套数组的中心。这是我试图解决的一个更大问题的一部分。我确信解决方案有点基础。我一直在学习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];
}
}
该功能应该返回'嘿!'字符串,但我似乎无法把它弄好。
答案 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!"
答案 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!"
但它的表现仍然会更差。