我有以下字符串字符串转换为JavaScript对象
":All;true:Yes;false: "
我想转换是一个对象,如:
var listItems =
[
{itemValue: "", itemText: "All"},
{itemValue: true, itemText: "Yes"},
{itemValue: false, itemText: " "}
];
任何优雅的方式做此表示赞赏。
我有以下字符串字符串转换为JavaScript对象
":All;true:Yes;false: "
我想转换是一个对象,如:
var listItems =
[
{itemValue: "", itemText: "All"},
{itemValue: true, itemText: "Yes"},
{itemValue: false, itemText: " "}
];
任何优雅的方式做此表示赞赏。
随着true/false
布尔支持:
var listItems = [];
var yourString = ":All;true:Yes;false: ";
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/
更新。对于通用值解析,您可以使用JSON.parse
方法和try/catch
块,如Esailija's answer中所示。
var str = ":All;true:Yes;false: ";
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: " "
itemValue: false
__proto__: Object
]
var string = ":All;true:Yes;false: ";
var array = string.split(/:|;/);
var listItems = [];
for (var i = 0; i < array.length; i += 2) {
listItems.push({itemValue: array[i], itemText: array[i + 1]})
}
注意,这将设置 “假” 与 “真” 的字符串。如果有的话,数字也是一样。如果你想保存适当的类型,你必须添加一个手动转换。喜欢的东西:
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: ";
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);
您可能要作出这样的'变种ARR2 = ARR [i] .split(“:”,1)'这将允许值包含冒号。 –
太好了,但我们也必须处理“真”和“假”:我们不希望它们在结果JSON中作为字符串出现,而是作为布尔值。 –
@GarethMcCaughan只有当我们对右侧有价值时,它才会起作用:) – VisioN