Convert string to javascript object

I have the following line

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

I want to convert to an object like:

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

Any elegant way to do it is appreciated.

+7
source share
4 answers

With true/false boolean support:

 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); 

DEMO: http://jsfiddle.net/MZKFU/1/


UPDATE. . For universal parsing, you can use the JSON.parse method with the try/catch provided in Esailija's answer .

DEMO: http://jsfiddle.net/MZKFU/2/

+12
source
 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 ); 

Result:

 [ Object itemText: "All" itemValue: "" __proto__: Object , Object itemText: "Yes" itemValue: true __proto__: Object , Object itemText: "&nbsp" itemValue: false __proto__: Object ] 
+6
source
 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]}) } 

Please note that the string will be set to false and true. The same goes for numbers, if you have one. If you want to save them with the appropriate types, you need to add a manual conversion. Something like:

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

Therefore, the string that clicks the object on the array will change as follows:

  listItems.push({itemValue: value(array[i]), itemText: array[i + 1]}) 
+2
source
 var myString = ":All;true:Yes;false:&nbsp"; var myArray = myString.split(';'); var literal = []; for(var i = 0; i<myArray.length; i++){ var mixed_string = myArray[i]; var changed_array = mixed_string.split(":"); var key = changed_array[0]; var value = changed_array[1]; literal.push({key:value}); } console.log(literal); 

+1
source

All Articles