次の文字列があります
":All;true:Yes;false: "
変換したいのは、次のようなオブジェクトです。
var listItems =
[
{itemValue: "", itemText: "All"},
{itemValue: true, itemText: "Yes"},
{itemValue: false, itemText: " "}
];
これを行うためのエレガントな方法は高く評価されています。
次の文字列があります
":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);
デモ: http://jsfiddle.net/MZKFU/1/
アップデート。Esailja's answerに示されているように、普遍的な値の解析には、ブロックでJSON.parse
メソッドを使用できます。try/catch
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]})
}
これにより、「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: ";
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);
</p>