Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert a string to javascript object

I have the following string

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

I want to convert is to an object like:

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

Any elegant way to doing this appreciated.

like image 265
chugh97 Avatar asked May 24 '12 08:05

chugh97


2 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 value parsing you can use JSON.parse method with try/catch block, as presented in Esailija's answer.

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

like image 192
VisioN Avatar answered Nov 15 '22 17:11

VisioN


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
]
like image 42
Esailija Avatar answered Nov 15 '22 15:11

Esailija