1

値を分割して配列をオブジェクトに変換する方法を考えていましたか?

var obj = {
    id: '',
    val: ''
}

つまり、次のような配列がある場合

["abc12", "abc1", "def12", "abc454"]

最初の 3 つの値をオフにするにはどうすればよいでしょうかsplit。つまり、次のようなオブジェクトのようになります。

{id: 'abc', val: 12}, {id: 'abc', val: 1} ...
4

3 に答える 3

1

編集:質問への回答ではありません

これは、目的のマップされた配列にはなりませんが、単一のオブジェクトになります。申し訳ありませんが、あなたの質問を読み間違えました:(

以下の回答は、オブジェクトの配列ではなく、1 つのオブジェクトを返します。


このような配列は、配列のreduceメソッドを使用して簡単にオブジェクトに折りたたむことができます。

var source = ["abc12", "abc1", "def12", "abc454"];
var obj = source.reduce(function(o, str) {
  var key = str.substr(0, 3)
  var value = parseInt(str.substr(3))
  o[key] = value;
  return o;
}, {})

// obj = { abc: 454, def: 12 }
于 2012-06-02T07:39:09.903 に答える
1
source.map(function(x) {
  return { id: x.substr(0,3), val: +(x.substr(3)) };
}
于 2012-06-02T07:44:24.237 に答える
0

1 つの解決策は、配列の要素を目的の形式のオブジェクトに変換する関数を使用して配列をマップすることです (herby が指摘したように)。
この場合、idは最初の数字より前のすべての文字で表され、valは文字列の後ろからの数字を表します。

source.map(function(x) {
    return { 
        id: x.replace(/(^.*?)\d+$/,'$1'), 
        val: parseInt(x.replace(/^.*?(\d+)$/,'$1'),10) 
    };
});

これが実際のデモです

Ps:古いブラウザではこれが実装されていない可能性があるため、注意してmapメソッドがプロトタイプ チェーンに存在するかどうかを確認することをお勧めします。Arrayこのブラウザの非互換性をカバーする方法を説明するリンクは次のとおりです: http://www.tutorialspoint.com/javascript/array_map.htm

于 2012-06-02T07:50:14.667 に答える