値を分割して配列をオブジェクトに変換する方法を考えていましたか?
var obj = {
id: '',
val: ''
}
つまり、次のような配列がある場合
["abc12", "abc1", "def12", "abc454"]
最初の 3 つの値をオフにするにはどうすればよいでしょうかsplit
。つまり、次のようなオブジェクトのようになります。
{id: 'abc', val: 12}, {id: 'abc', val: 1} ...
値を分割して配列をオブジェクトに変換する方法を考えていましたか?
var obj = {
id: '',
val: ''
}
つまり、次のような配列がある場合
["abc12", "abc1", "def12", "abc454"]
最初の 3 つの値をオフにするにはどうすればよいでしょうかsplit
。つまり、次のようなオブジェクトのようになります。
{id: 'abc', val: 12}, {id: 'abc', val: 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 }
source.map(function(x) {
return { id: x.substr(0,3), val: +(x.substr(3)) };
}
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。