我有一个算法,用户将输入一个字符串,我会将其解析为 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/