Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中将管道分隔字符串解析为键值对_Javascript_Jquery_Parsing_Javascript Objects - Fatal编程技术网

如何在Javascript中将管道分隔字符串解析为键值对

如何在Javascript中将管道分隔字符串解析为键值对,javascript,jquery,parsing,javascript-objects,Javascript,Jquery,Parsing,Javascript Objects,我想将以下类型的字符串解析为Javascript对象中的键值对: var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>'; 4个大写字母PLNC、SUBD和CITY的每个单词都是一个键,而紧跟其后的管道中的单词是值。对于PLNC,第一个单词是未定义的,SUBD的单词是“Pines”,而CITY的单词是“Fort Myers” 请注意,“| EOR |”

我想将以下类型的字符串解析为Javascript对象中的键值对:

var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';
4个大写字母PLNC、SUBD和CITY的每个单词都是一个键,而紧跟其后的管道中的单词是值。对于PLNC,第一个单词是未定义的,SUBD的单词是“Pines”,而CITY的单词是“Fort Myers”

请注意,“| EOR |”紧跟在每个键值对之前

做这件事的最好方法是什么?

如果你有,如果你没有,那么在他们的网页上打开你的控制台试试看,因为他们已经包括了下划线:

然后玩一玩。以下是您旅程的开始:

_.compact(stringVar.split(/<br>|EOR|\|/))
试一试

这将对问题中的特定数据字符串起作用

它还可以处理相同通用格式的其他数据字符串,但依赖于:

在解析之前是可丢弃的 每个记录是一组由|管道描绘的4个字符串元素 每个记录的第一个元素是键 第二和第三要素结合形成价值 第四个元素是可丢弃的。
我刚刚意识到,从技术上讲,它是一种csv格式,具有有趣的行尾。这有一些限制,因为变量值不能包含任何|或
,因为它们是定义字符串结构的标记。你当然可以逃离他们

var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';

function decodeString(str, variable_sep, line_endings)
{
    var result = [];
    var lines = str.split(line_endings);
    for (var i=0; i<lines.length; i++) {
        var line = lines[i];
        var variables = line.split(variable_sep);
        if (variables.length > 1) {
            result[variables[0]] = variables[1];
        }
    }
    return result;
}

var result = decodeString(stringVar, "|", "<br>");

console.log(result);

不简单。你似乎有很多额外的管道。是的,这是我在尝试使用它时遇到的问题之一。按|分解,然后用reg exp循环通过它们
var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';

function decodeString(str, variable_sep, line_endings)
{
    var result = [];
    var lines = str.split(line_endings);
    for (var i=0; i<lines.length; i++) {
        var line = lines[i];
        var variables = line.split(variable_sep);
        if (variables.length > 1) {
            result[variables[0]] = variables[1];
        }
    }
    return result;
}

var result = decodeString(stringVar, "|", "<br>");

console.log(result);