IT二刀流にはプロモーションが含まれています。

node.jsで変数を動的に指定して使用する

既に存在している変数を動的に指定して処理したい時の方法です。

eval()を使用して文字列をJavaScriptコードとして評価します。

eval()

eval()関数は、文字列として表現されたJavaScriptコードを評価します。

ただ、文字列をコードとして評価するのは危険なため、GETやPOSTされたリクエストには使用しないようにしましょう。

第三者が入力したコードに対してeval()は危険です、今回は既に存在しているコード内の変数に使用するので大丈夫です。

サンプルコード

あるシステムでコード内に配列で持っていた値をDBに入れる時に使用しました。

データはもっと数があったので、最初からDBに入れてくれよって感じですけど。

サンプルコードの値は変えています。

const vegetables = [
  {id: 1, name: 'キャベツ'},
  {id: 2, name: 'レタス'},
  {id: 3, name: '人参'},
  {id: 4, name: 'トマト'},
  {id: 5, name: 'スイカ'}
];

const fruits = [
  {id: 1, name: 'リンゴ'},
  {id: 2, name: '桃'},
  {id: 3, name: 'イチゴ'},
  {id: 4, name: 'ゴーヤ'},
  {id: 5, name: 'メロン'}
];

['vegetables', 'fruits'].map(key => {
  const data = eval(`${key}`);
  data.map(v => {
    console.log(`INSERT INTO food(category, id, name) VALUES('${key}', ${v.id}, '${v.name}');`);
  });
});

「const data = eval(${key});」でkeyの文字列をコードとして評価してdataに代入しています。

出力結果は下記になります。

INSERT INTO food(category, id, name) VALUES('vegetables', 1, 'キャベツ');
INSERT INTO food(category, id, name) VALUES('vegetables', 2, 'レタス');
INSERT INTO food(category, id, name) VALUES('vegetables', 3, '人参');
INSERT INTO food(category, id, name) VALUES('vegetables', 4, 'トマト');
INSERT INTO food(category, id, name) VALUES('vegetables', 5, 'スイカ');
INSERT INTO food(category, id, name) VALUES('fruits', 1, 'リンゴ');
INSERT INTO food(category, id, name) VALUES('fruits', 2, '桃');
INSERT INTO food(category, id, name) VALUES('fruits', 3, 'イチゴ');
INSERT INTO food(category, id, name) VALUES('fruits', 4, 'ゴーヤ');
INSERT INTO food(category, id, name) VALUES('fruits', 5, 'メロン');

まとめ

eval()は便利ですけど、危険性もあるので注意して使うようにしましょう。

そもそも大量のデータを設定ファイルやソース内に保持しないで、最初からDBを使用しましょう。

ITエンジニアの転職

いまITエンジニアの需要は急拡大しています。
ITエンジニアの経験があれば好条件で転職することも難しくありません。

転職ドラフト

☆ 支援ご協力のお願い ☆

この記事が「役に立った」と感じたら

投げ銭の「OFUSEで応援」で支援して頂けたら励みになります!

OFUSEのやり方(説明)

関連記事
記事特集