Javascript:串联字符串中的额外字符阻止与对象键匹配

Javascript:串联字符串中的额外字符阻止与对象键匹配,javascript,regex,string,object,concatenation,Javascript,Regex,String,Object,Concatenation,我正在尝试使用对象密钥访问另一个对象中的对象。我将一组元素的值串联起来,以构建一个与键匹配的字符串。不幸的是,这根本不起作用。下面是代码: var valueKeyString = ""; $(".keySelector").each(function(){ valueKeyString += $(this).val(); }); if (geoAttrs[selectedGeoAttr].rowCol == "row") { ma

我正在尝试使用对象密钥访问另一个对象中的对象。我将一组
元素的值串联起来,以构建一个与键匹配的字符串。不幸的是,这根本不起作用。下面是代码:

    var valueKeyString = "";
    $(".keySelector").each(function(){
        valueKeyString += $(this).val();
    });
    if (geoAttrs[selectedGeoAttr].rowCol == "row") {
        mapData = rowValueGroups[valueKeyString];
    } else if (geoAttrs[selectedGeoAttr].rowCol == "col") {
        mapData = colValueGroups[valueKeyString];
    } 
在尝试了很多东西之后,我使用
charCodeAt()
逐个字符地测试了字符串:

一定有更好的办法,对吧?这到底是怎么回事

编辑:
rowValueGroups
可能如下所示:

{
  "35_to_44_yearsMale": {
    "4654387684": {
      "value": 215
    },
    "4654387685": {
      "value": 175
    },
    "4654387686": {
      "value": 687
    },
    "4654387687": {
      "value": 172
    }
  },
  "45_to_54_yearsMale": {
    "4654387684": {
      "value": 516
    },
    "4654387685": {
      "value": 223
    },
    "4654387686": {
      "value": 54
    },
    "4654387687": {
      "value": 164
    }
  }
}
valueKeyString
应为
“45至54岁”等

这是调查数据。我正在从nicolaskruchten/数据透视表自定义呈现程序的输出中提取
rowValueGroups
数据。(如果您感兴趣,请特别从
pivotData.tree
对象)。我不想改变数据透视表的核心来改变这些键的格式,所以我只是想把select元素中的几个值连接起来,使其工作起来

下面是来自上述测试的部分控制台输出:

35_to_44_yearsMale51 53 95 116 111 95 52 52 95 121 101 97 114 115 0 77 97 108 101
35_to_44_yearsMale51 53 95 116 111 95 52 52 95 121 101 97 114 115 77 97 108 101

第一行是对valueKeyString进行的测试,第二行是对
行ValueGroups
中的一个键进行的测试。请注意,初始字符串看起来是相同的,(Firefox控制台实际上为
valueKeyString
one输出了一个不在“years”和“Male”之间的小字符,但是
charCodeAt()
在连接点出现了奇怪的0字符。

因为您使用的是jQuery,所以可以尝试
trim()


如果识别字符代码,则可以尝试完全使用其代码替换它:

var valueKeyString = "";
$(".keySelector").each(function(){
    valueKeyString += $(this).val();
});
valueKeyString = valueKeyString.replace(new RegExp(String.fromCharCode(0),"g"),'');
或者假定字符串已经来自jquery
\0
-直接从jquery
$(this).val()
终止。您可以尝试另一种方法:

var valueKeyString = "";
$(".keySelector").each(function(){
    s = $(this).val();
    if ( s.charCodeAt(s.length - 1) == 0 )
        s = s.substring(0, s.length - 1);
    valueKeyString += s;
});

上面的代码段检查从
$(this).val()
新获取的每个字符串的最后一个字符是否以null结尾(只是为了确保),并使用
substring()
删除字符串中的最后一个字符。此正则表达式将删除它们:

valueKeyString = valueKeyString.replace( /\0/g, '' )

参考资料:

对于
valueKeyString
rowValueGroups
,值的示例将非常有用。这样可以更容易地了解您试图在编辑中实现的目标。如果您只是在每次编辑后清理字符串,会怎么样?类似于
valueKeyString=valueKeyString.replace(/[^a-z0-9.-]+/gi,”)
尝试了一下。这并不能清除那个奇怪的角色。看起来正则表达式之类的东西实际上并没有将它识别为一个字符,所以它们无法摆脱它。尽管如此,它似乎足以阻止字符串匹配。您能给我们一个在JSFIDLE上可复制的演示吗?我对keySelector元素的html特别感兴趣。这两种解决方案都不能有效地删除奇怪的0字符。这就好像它不是一个真正的字符,只是其他返回字符代码0的字符。我还没有找到任何有效的方法来移除它。
var valueKeyString = "";
$(".keySelector").each(function(){
    valueKeyString += $(this).val();
});
valueKeyString = valueKeyString.replace(new RegExp(String.fromCharCode(0),"g"),'');
var valueKeyString = "";
$(".keySelector").each(function(){
    s = $(this).val();
    if ( s.charCodeAt(s.length - 1) == 0 )
        s = s.substring(0, s.length - 1);
    valueKeyString += s;
});
valueKeyString = valueKeyString.replace( /\0/g, '' )