javascript - 在javascript中使用split的递归解析器

标签 javascript arrays algorithm parsing recursion

我有一个算法,用户将输入一个字符串,我会将其解析为 2+ 维数组。因此,例如,用户可以输入 1,2,3;4,5,6 并将文本设置为按分号和逗号解析。第一次通过将创建一个包含 2 个条目的数组。第二次通过将在之前的两个位置创建一个 3 条目数组。

用户可以添加或删除用于解析原始字符串的文本项的数量,例如分号或逗号,这意味着生成的数组可以具有与解析项一样多的维度。

这似乎不是一个难题,但我遇到了一些障碍。

到目前为止,这是我的代码。

vm.parsers = [';', ','];

vm.inputString = "1,2,3,4,5;6,7,8,9,10";

function parseDatasetText( )
{   
    vm.real = vm.parseMe( vm.inputString, 0);
};


function parseMe( itemToParse, indexToParse )
{   
    if ( indexToParse < vm.parsers.length )
    {
        console.log('Parsing *'+itemToParse+'* with '+vm.parsers[indexToParse]);
        var tempResults = itemToParse.split( vm.parsers[indexToParse] );
        for (var a=0; a<tempResults.length; a++)
        {
            console.log('Pushing '+tempResults[a]);
            tempResults[a] = vm.parseMe( tempResults[a], parseInt( indexToParse ) + 1 )
            console.log('This value is '+tempResults[a]);
        }
    }else
    {
        console.log('Returning '+itemToParse);
        return itemToParse
    }
}; 

从控制台日志可以看出,算法在最后一次解析后吐出了一个未定义的结果,最终的答案是未定义的。

也许我只是没睡够,但我在想数组会通过拆分递归填充吗?

谢谢

最佳答案

function parseDatasetText(){ 
    //composing parser from right to left into a single function 
    //that applies them from left to right on the data
    var fn = vm.parsers.reduceRight( 
        (nextFn, delimiter) => v => String(v).split(delimiter).map(nextFn), 
        v => v
    );

    return fn( vm.inputString ); 
}

不知道还有什么要补充的。

关于javascript - 在javascript中使用split的递归解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167868/

相关文章:

java - 合并两个具有重复项的 Java Arraylist

javascript - toBeCloseTo 等效于 Jest 中的递归相等性测试

java - 二元运算符+的错误操作数类型(JAVA 程序)

c++ - 对象数组和崩溃

algorithm - 构建节点之间距离相等的路径的最佳方法是什么?

C二叉查找树删除实现

javascript - 如何向传单 map 添加叠加层?

javascript - 如何使用 sequelize 检查记录是否更新

javascript - ckeditor中的超链接,href不接受双引号

javascript - 什么是 Javascript 代码的 O(1) 空间复杂度以及示例