7

次の文字列があります

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

変換したいのは、次のようなオブジェクトです。

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

これを行うためのエレガントな方法は高く評価されています。

4

4 に答える 4

12

ブール値の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/


アップデート。Esailja's answerに示されているように、普遍的な値の解析には、ブロックでJSON.parseメソッドを使用できます。try/catch

デモ: http://jsfiddle.net/MZKFU/2/

于 2012-05-24T08:39:26.510 に答える
6
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
]
于 2012-05-24T08:46:25.317 に答える
2
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]})
于 2012-05-24T08:48:51.410 に答える
1
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);

</p>

于 2012-05-24T09:44:38.697 に答える