Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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 - Fatal编程技术网

Javascript函数从字符串中拆分并返回值

Javascript函数从字符串中拆分并返回值,javascript,Javascript,我试图抓住一个特定的价值。我是javascript新手,我不明白为什么这不起作用 如果我解析“kid_2”,我应该得到“kostas”。我总是得到“02-23-2000”,而不是“Kostas”。所以我一定有一个逻辑问题在循环中,但我真的卡住了 function getold_val(fieldname,str){ var chunks=str.split("||"); var allchunks = chunks.length-1; for(k=0;k<allchun

我试图抓住一个特定的价值。我是javascript新手,我不明白为什么这不起作用

如果我解析“kid_2”,我应该得到“kostas”。我总是得到“02-23-2000”,而不是“Kostas”。所以我一定有一个逻辑问题在循环中,但我真的卡住了

function getold_val(fieldname,str){

  var chunks=str.split("||");
  var allchunks = chunks.length-1;
     for(k=0;k<allchunks;k++){
       var n=str.indexOf(fieldname);
       alert(chunks[k]);
       if(n>0){
       var chunkd=chunks[k].split("::");
         alert(chunkd);
         return chunkd[1];
       }
     }
}
var test = getold_val('kid_2','date_1::02-23-2000||date_2::06-06-1990||kid_1::George||kid_2::Kostas||');

alert(test);
函数getold\u val(字段名,str){ var chunks=str.split(“| |”); var allchunks=chunks.length-1; 对于(k=0;k0){ var chunkd=chunks[k]。拆分(“:”); 警报(分块); 返回chunkd[1]; } } } var测试=getold_val('kid_2','date_1::02-23-2000 | | date_2::06-06-1990 | | kid_1::George | | kid_2::Kostas | |); 警报(测试);
有两个错误。第一个错误出现在
indexOf
调用中:

var n = str.indexOf(fieldname);
这将始终返回大于或等于0的值,因为该字段存在于字符串中。你应该做的是:

var n = chunks[k].indexOf(fieldname);
第二个错误出现在
if
语句中。应该是:

if(n >= 0) {
   ...
}

您正在查找的子字符串很可能是字符串开头的,在这种情况下,其索引为0
indexOf
如果找不到您要查找的内容,则返回-1

也就是说,这里有一个更好的方法来做你想做的事情:

function getold_val(fieldName, str) {
    var keyValuePairs = str.split("||");
    var returnValue = null;

    if(/||$/.match(str)) {
       keyValuePairs = keyValuePairs.slice(0, keyValuePairs.length - 1);
    }

    var found = false;
    var i = 0;
    while(i < keyValuePairs.length && !found) {
       var keyValuePair = keyValuePairs[i].split("::");

       var key = keyValuePair[0];
       var value = keyValuePair[1];

       if(fieldName === key) {
          returnValue = value;
          found = true;
       }

       i++;
    }

    return returnValue;
}
函数getold\u val(字段名,str){ var keyValuePairs=str.split(“| |”); var returnValue=null; 如果(/|$/.match(str)){ keyValuePairs=keyValuePairs.slice(0,keyValuePairs.length-1); } var=false; var i=0; while(i有两个错误。第一个错误出现在
indexOf
调用中:

var n = str.indexOf(fieldname);
这将始终返回大于或等于0的值,因为该字段存在于字符串中。你应该做的是:

var n = chunks[k].indexOf(fieldname);
第二个错误出现在
if
语句中。应该是:

if(n >= 0) {
   ...
}

您正在查找的子字符串很可能是字符串开头的,在这种情况下,其索引为0
indexOf
如果找不到您要查找的内容,则返回-1

也就是说,这里有一个更好的方法来做你想做的事情:

function getold_val(fieldName, str) {
    var keyValuePairs = str.split("||");
    var returnValue = null;

    if(/||$/.match(str)) {
       keyValuePairs = keyValuePairs.slice(0, keyValuePairs.length - 1);
    }

    var found = false;
    var i = 0;
    while(i < keyValuePairs.length && !found) {
       var keyValuePair = keyValuePairs[i].split("::");

       var key = keyValuePair[0];
       var value = keyValuePair[1];

       if(fieldName === key) {
          returnValue = value;
          found = true;
       }

       i++;
    }

    return returnValue;
}
函数getold\u val(字段名,str){ var keyValuePairs=str.split(“| |”); var returnValue=null; 如果(/|$/.match(str)){ keyValuePairs=keyValuePairs.slice(0,keyValuePairs.length-1); } var=false; var i=0; while(i这很有效,这是我的建议

函数getold\u val(字段名,str){ var chunks=str.split(“| |”); for(var i=0;i=0){ 返回(chunks[i].子字符串(fieldname.length+2)); } } } 警报(getold_val(“kid_2”,“date_1::02-23-2000 | | date_2::06-06-1990 | | kid_1::George | | kid_2::Kostas | |”); 代码的问题是(正如@slebetman所注意到的)字符串索引可以是0,因为它完全从第一个字母开始

代码与您的代码几乎相同,我只是没有使用第二个
.split('::')
,因为我觉得
。子字符串(…)
会更容易。

这很有效,我的建议如下

函数getold\u val(字段名,str){ var chunks=str.split(“| |”); for(var i=0;i=0){ 返回(chunks[i].子字符串(fieldname.length+2)); } } } 警报(getold_val(“kid_2”,“date_1::02-23-2000 | | date_2::06-06-1990 | | kid_1::George | | kid_2::Kostas | |”); 代码的问题是(正如@slebetman所注意到的)字符串索引可以是0,因为它完全从第一个字母开始


代码与您的几乎相同,我只是没有使用第二个
.split('::')
,因为我觉得
.substring(…)
会更简单。

正则表达式可能更吸引人。这里有一个:

但是,如果您想要更复杂一些的内容,可以将该字符串解析到类似于so()的字典中:

function splitToDictionary(val、fieldDelimiter、valueDelimiter){
var dict={},
字段=val.split(字段分隔符),
kvp;
对于(var i=0;i
正则表达式可能更有吸引力。这里有一个:

但是,如果您想要更复杂一些的内容,可以将该字符串解析到类似于so()的字典中:

function splitToDictionary(val、fieldDelimiter、valueDelimiter){
var dict={},
字段=val.split(字段分隔符),
kvp;
对于(var i=0;i
应该是
allchunks=chunks.length