我正在尝试用一系列内联变量解析 JS 中的字符串。目标是将这些变量转换为具有名称值对的对象。
示例:
var hwStr = "color=blue+coreCnt=4+shell=aluminum+wireless=false";
我知道我可以解析原始字符串以获得一个名称值对数组,如下所示:
varArr = hwStr.split("+");
当我打印该数组时,我会得到:
>color=blue,
>coreCnt=4,
>shell=aluminum,
>wireless=false
为了手动创建这个对象,它看起来像:
var hwSpec = {color: 'blue', coreCnt: 4, shell: 'aluminum', wireless: false};
我的问题是,如何使用 foreach 语句创建一个将这些作为名称值对的对象。
公平地说,JS 不是我的语言,但我知道我应该知道这一点......这可能是一个菜鸟问题,任何帮助都会很棒。
Gary C 又名 UnKulMunki
最佳答案
拆分加号后,您可以 .reduce()
处理每个 key=value
对并添加到对象的结果数组:
var hwStr = "color=blue+coreCnt=4+shell=aluminum+wireless=false";
var obj = hwStr.split("+").reduce(function(o, item) {
item = item.split("=");
o[item[0]] = item[1];
return o;
}, {});
console.log(obj);
这与使用 .forEach()
类似,只不过不是在调用 .forEach()
之前在变量中创建空对象,而是将空对象作为.reduce()
的参数。对于这个特定问题,它没有太大区别,但在某些情况下 .reduce()
使您不必创建临时工作变量。
编辑:请注意,我的代码将所有属性值创建为字符串 - 我认为没有任何方法可以知道 false
是否应被视为 bool 值 false
或字符串“false”
,除非您想假设所有可以解析为 bool 值或数字的值应该被视为 bool 值或数字.
关于JavaScript。如何解析一串变量并将其转换为具有属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42309774/