将字符串转换为javascript对象

我有以下字符串

":All;true:Yes;false:&nbsp" 

我想转换为一个像这样的对象:

 var listItems = [ {itemValue: "", itemText: "All"}, {itemValue: true, itemText: "Yes"}, {itemValue: false, itemText: "&nbsp"} ]; 

任何优雅的方式来做到这一点赞赏。

使用true/false布尔支持:

 var listItems = []; var yourString = ":All;true:Yes;false:&nbsp"; var arr = yourString.split(";"); for (var i = 0; i < arr.length; i++) { var arr2 = arr[i].split(":"); var value = arr2[0] || ""; if (value == "true" || value == "false") value = (value === "true"); listItems.push({ itemValue : value, itemText : arr2[1] || "" }); } console.log(listItems); 

演示: http //jsfiddle.net/MZKFU/1/


UPDATE。 对于通用值解析,您可以将JSON.parse方法与try/catch块一起使用,如Esailija的答案中所示 。

演示: http //jsfiddle.net/MZKFU/2/

 var str = ":All;true:Yes;false:&nbsp"; var listItems = str.split(/[;:]/g).map( function(v, i, arr){ var itemValue; if( i % 2 ) { return; } try { itemValue = JSON.parse(v); } catch(e) { itemValue = v; } return { itemValue: itemValue, itemText: arr[i + 1] }; }).filter( Boolean ); 

结果:

 [ Object itemText: "All" itemValue: "" __proto__: Object , Object itemText: "Yes" itemValue: true __proto__: Object , Object itemText: "&nbsp" itemValue: false __proto__: Object ] 
 var string = ":All;true:Yes;false:&nbsp"; var array = string.split(/:|;/); var listItems = []; for (var i = 0; i < array.length; i += 2 ) { listItems.push({itemValue: array[i], itemText: array[i + 1]}) } 

请注意,这会将“false”和“true”设置为字符串。 数字相同,如果你有。 如果要使用正确的类型保存它们,则必须添加手动转换。 就像是:

 function value(val) { if (!isNaN(val)) return +val; if (val === "true") return true; if (val === "false") return false; return val; } 

因此,将对象推送到数组的行将更改如下:

  listItems.push({itemValue: value(array[i]), itemText: array[i + 1]}) 
 var myString = ":All;true:Yes;false:&nbsp"; var myArray = myString.split(';'); var literal = []; for(var i = 0; i