如何将字符串解析为哈希表
How to parse a string into a hashtable
有没有一种简单的方法(甚至是一个简单的命令)可以从包含键值对的字符串中构建哈希表(关联数组、JSON-随便什么),用给定的分隔符分隔。
示例:
n1=v1&n2=v2&n3=v3
(其中&
是分隔符)应返回:[{n1:v1}, {n2:v2}, {n3:v3}]
示例2:
n1=v1;n2=v2;n3=v3
(其中;
是分隔符)
谢谢!
下面将以一种非常基本的方式进行操作,并检查每种情况下的键是否为空。所有值都将是字符串。
function parse(str, separator) {
var parsed = {};
var pairs = str.split(separator);
for (var i = 0, len = pairs.length, keyVal; i < len; ++i) {
keyVal = pairs[i].split("=");
if (keyVal[0]) {
parsed[keyVal[0]] = keyVal[1];
}
}
return parsed;
}
示例:
var props = parse("n1=v1&n2=v2&n3=v3", "&");
alert(props.n2); // Alerts v2
假设您使用的是现代浏览器:
str = "n1=v1&n2=v2&n3=v3"
delim = "&"
obj = str.split(delim).
map(function(s) { return s.split("=") }).
reduce(function(p, s) { return p[s[0]] = s[1], p }, {})
映射,减少
此外,当在云中运行时,这也可以很好地扩展(请参阅http://en.wikipedia.org/wiki/MapReduce)。
注意:这会产生指定的[{n1:'v1'}, {n2:'v2'}]
格式,而不是更适合Hashtable描述的{ n1: 'v1', n2: 'v2' }
格式。
如果你可以在除分隔符之外的所有其他方面信任你的输入,那么它看起来像这样:
function splitByDelimiter(input, delimiter) {
var parts = input.split(delimiter);
var output = [];
for(var i = 0; i < parts.length; i++) {
var item = {};
var keyValue = parts[i].split('=');
item[keyValue[0]] = keyValue[1];
output.push(item);
}
return output;
}
splitByDelimiter('n1=v1;n2=v2;n3=v3', ';')
var stuff = "n1=v1&n2=v2&n3=v3".split("&"),
moreStuff = [],
hashStuff = {},
i = 0, l = stuff.length;
for (;i<l;i++) {
moreStuff = stuff[i].split("=");
hashStuff[moreStuff[0]] = moreStuff[1];
}
我的尝试,不是一个有效的尝试:(
query = 'n1=v1&n2=v2&n3=v3'.split('&')
obj = {}
$.each(arr,function(k,v){
key = v.split('=')[0]
value = v.split('=')[1];
obj[key] = value;
})
obj.n1 outputs v1
var str = "n1=v1&n2=v2&n3=v3";
var arr = eval('[{' + str.replace(/=/g, ':"').replace(/&/g, '"},{') + '"}]');
或者如果您不喜欢eval
var arr = jQuery.parseJSON('[{"' + str.replace(/=/g, '":"').replace(/&/g, '"},{"') + '"}]')
正则表达式。
请从中查看此摘要http://www.regular-expressions.info/javascript.html(字符串类的Regexp方法部分):
使用字符串的split()方法可以将字符串拆分为使用正则表达式确定位置的字符串数组字符串在该位置被拆分。例如,myArray=myString.split(/,/)将逗号分隔的列表拆分为数组。逗号本身不包括在结果字符串数组中。
编辑
您也可以参考其他问题:在JavaScript 中解析查询字符串
不像"内置"中那样"简单",但。。。
var myQueryString = "n1=v1&n2=v2&n3=v3";
var delim = '&';
var vars = myQueryString.split(delim);
var parsed = {};
for (var i=0; i<vars.length; i++) {
var kvPair = vars[i].split("=");
parsed[kvPair[0]] = kvPair[1];
}
结果在parsed
中。
function parseStr2Map(str) {
var elems = str.split("&");
var map = {};
for (var i = 0; i < elems.length; i++) {
var nvPair = elems[i].split("=");
map[nvPair[0]] = nvPair[1];
}
return map;
}
它没有错误处理。如果你想解析location.search,那么你必须进行解码。。。
var input = 'n1=v1&n2=v2&n3=v3';
var tokens = input.split('&');
var hashTable = {};
for (var i = 0; i < tokens.length; i++) {
var keyValuePair = tokens[i].split('=');
var key = keyValuePair[0];
var value = keyValuePair[1];
hashTable[key] = value;
}
alert(JSON.stringify(hashTable));
- 如何在JavaScript中实现哈希表
- 用JavaScript中的循环传递哈希表/字典
- 将 Javascript 哈希表用于多个 If Thens
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 使用 JavaScript 中的对象的哈希表功能
- 用于 C# 的类似 V8 的哈希表
- 如何在 JavaScript 中动态创建哈希表
- 如何使用 Node.JS 在哈希表中为每个键存储多个值
- 如何在 JavaScript 中实现哈希表
- 在引擎盖下,是Javascript对象哈希表
- 检查多个哈希子字符串
- 如何在java脚本中打印此哈希表数据
- 如何将 Python 字典转换为 JavaScript 哈希表
- 你如何观察 Knockout 中的 JavaScript 哈希表
- 已解决查询(关于哈希表)中的解决方案给了我 NaN
- 哈希表-给定密钥的哈希计算频率
- 与哈希表相比,通过循环访问数组中对象的Javascript优化
- 数组哈希表上的循环
- 从html输入文本类型的文本框中获取字符串形式的值,并将其传递给aspx中正在使用的C#哈希表
- 如何将字符串解析为哈希表