javascript - 在 JavaScript 中解析数组的数组

标签 javascript arrays parsing recursion

我需要一个函数,它可以从可能包含任意数量数组的数组中返回一个值。它应该像 getValueFromArray(array, [2, 4]) 一样调用 - 此示例应返回传递数组的 2d 数组的第 4 个元素。

这是我的代码:

function getValueFromArray(arr, indexes){

var val,
    currentIndex = indexes[0];

    if(!arr[currentIndex] || arr[currentIndex] === '') return value = '';

    indexes.splice(0, 1);

    if(arr[currentIndex].length) 
        getValueFromArray(arr[currentIndex], indexes);
    else {
        val = arr[currentIndex];
        return val;
    }
 }


      var y = getValueFromArray([[1,2,3,4], [1,2,3,4]], [0, 2]); // should return 3

      var x = getValueFromArray([[1,2,3,4], [1,2,3,4], [5,6,7,8]], [2, 3]); // should return 8

      var z = getValueFromArray(
                           [
                               [[1,2,3,4], [1,2,3,4], [1,2,3,4]],
                               [[1,2,3,4], [1,2,3,4]]
                           ], 
                           [0, 1, 2]
                          ); // should return 3

这样的调用应该返回3,如果我调试该函数,它实际上返回正确的值,但是当我将它分配给变量时,它返回未定义。我猜这是因为递归,变量在第一次函数调用期间获取了未定义的值。如何解决这个问题?

谢谢!

最佳答案

您没有返回递归结果。

if(arr[currentIndex].length) 
    getValueFromArray(arr[currentIndex], indexes);

应该是:

if(arr[currentIndex].length) 
    return getValueFromArray(arr[currentIndex], indexes);

关于javascript - 在 JavaScript 中解析数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29658039/

相关文章:

javascript - 在javascript中调用C函数

javascript - 为什么这在 Angular js 中有效

c++ - 将文件读入结构数组,然后排序

iOS 加载自定义注解

java - 如何格式化日期/时间字符串? ( java )

javascript - Laravel elixir "gulp watch"不监视 Javascript 更改

javascript - 在 Javascript 对象上定义方法/函数

c++ - 反向数组 - 没有第一个数字

c++ - 错误:assigning to an array from an initializer list c++

parsing - 逻辑或与逻辑与 : which should be more binding?