我正在尝试使用一系列vars内联解析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
答案 0 :(得分:3)
分割加号后,您可.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
是否应被视为布尔值false
或字符串"false"
,除非你想假设可以解析为布尔值或数字的所有值应被视为布尔值或数字。
答案 1 :(得分:1)
首先,您将字符串拆分为+
,以便获得一组键/值对。
然后,循环遍历这些对并在=
处拆分每对以将键与值分开。然后将密钥指定为属性名称,将值指定为属性值。
var hwStr = "color=blue+coreCnt=4+shell=aluminum+wireless=false";
// Split the string into an array of key/value pairs
var pairs = hwStr.split("+");
// Set up a new, empty object
var newObj = {};
// Loop through the key/value pairs array. The .forEach method takes
// a function as an argument that, itself, receives a value representing
// the current array item being iterated (a single key/value pair from
// the array in this case).
pairs.forEach(function(pair){
// Create a new property on the object with the key of the current pair
// and a value of the value of the current pair.
newObj[pair.split("=")[0]] = pair.split("=")[1];
});
console.log(newObj);

答案 2 :(得分:0)
要做到这一点,你必须使用JSON的解析方法将字符串转换为javaScript对象的文字,这是如何做到的:
var arr = hwStr.split("+");
var temp_arr = null;
var hwSpec = null;
var stringToConv = '{'; //string to convert to object literal
//iterate through the array
for (var i = 0; i < arr.length; i++){
temp_arr = arr[i].split("=");
stringToConv += '"' + temp_arr[0] + '":"' + temp_arr[1] + '"';
//check if is the last string in the arr
if (i === arr.length - 1){
stringToConv += '}'
}
else { //add comma
stringToConv += ",";
}
}
//convert to object using JSON
hwSpec = JSON.parse(stringToConv);
//your code here