JavaScriptでカンマ区切りの文字列をオブジェクト内の配列に変換する方法
次のような文字列があるとします。
const str = 'dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james';
このような文字列を受け取り、カテゴリ(最初の単語)ごとに値をまとめた、以下のような配列を持つオブジェクトを生成するJavaScript関数を作成する必要があります。
const output = {
dress: ["cotton", "leather", "black", "red", "fabric"],
houses: ["restaurant", "school", "small", "big"],
person: ["james"]
};実装コードの例
const str = 'dress/cotton/black, dress/leather/red, dress/fabric, houses/restaurant/small, houses/school/big, person/james';
const buildObject = (str = '') => {
const result = {};
const strArr = str.split(', ');
strArr.forEach(el => {
const values = el.split('/');
const key = values.shift();
result[key] = (result[key] || []).concat(values);
});
return result;
};
console.log(buildObject(str));コードの仕組み
この関数は、次の手順で処理を行います。
1. 文字列をグループに分割
まず split(', ') を使って、元の文字列を「dress/cotton/black」のようなグループ単位に分割します。区切り文字として「カンマ+半角スペース」を指定している点に注意してください。
2. 各グループをキーと値に分解
次に、各グループを split('/') でスラッシュ区切りに分解します。そして shift() を使って先頭の要素を取り出し、それをオブジェクトのキーとして使用します。残りの要素がそのキーに対応する値の配列になります。
3. 同じキーへの値の追記
同じキーがすでに存在する場合は concat() で既存の配列に値を連結し、存在しない場合は空の配列から新しく作成します。(result[key] || []) の部分がこの判定を担っています。
出力結果
コンソールには次のように出力されます。
{
dress: [ 'cotton', 'leather', 'black', 'red', 'fabric' ],
houses: [ 'restaurant', 'small', 'school', 'big' ],
person: [ 'james' ]
}このように、split()・shift()・concat() を組み合わせるだけで、構造化されていない文字列データを扱いやすいオブジェクト形式へ簡単に変換できます。CSVライクなデータやURLパスのような階層データの前処理にも応用できる便利なパターンです。
-
JavaScriptで文字列を日付に変換する方法
日付を表すのに最もおすすめの形式は「yyyy-mm-dd」です。これはISO 8601(国際標準規格)に準拠した形式で、国や地域による表記の違いによる混乱がなく、誰にとっても分かりやすいのが特徴です。JavaScriptでは、この形式の文字列からDateオブジェクトへの変換はとても簡単です。文字列をそのままDateコンストラクタに渡すだけで、自動的に解析してくれます。基本的な例let a = 2019-08-10; console.log(new Date(a));出力結果上記のコードを実行すると、次のような出力が得られます。Sat Aug 10 2019 05:30:00 GMT+0530
-
文字列をJavaScriptオブジェクトに変換する方法【JSON.parse()の使い方】
JavaScriptでJSON形式の文字列をオブジェクトに変換するには、JSON.parse()メソッドを使用します。このメソッドは、引数に渡された文字列を解析(パース)し、対応するJavaScriptオブジェクトを返します。 サンプルコード <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Docum