[JS] PHPのarray_combineをJavaScriptで

array_combine — 一方の配列をキーとして、もう一方の配列を値として、ひとつの配列を生成する

ピコ太郎のPPAPがまんまそのイメージ。

つまりこういうのがやりたい:

const key = ['green', 'red', 'yellow'];
const val = ['avocado', 'apple', 'banana'];
↓
{"green":"avocado","red":"apple","yellow":"banana"}

今はこのように書ける:

const key2 = ['green', 'red', 'yellow'];
const val2 = ['avocado', 'apple', 'banana'];
const result2 = Object.assign(
  ...key2.map((key, i) => ({ [key]: val2[i] }))
);

もとはこの質問にあったソースで、
配列の中にある配列をオブジェクトに変換するにはどうしたらいいのか?というものだった。

const arr = [ [ 'cardType', 'iDEBIT' ],
  [ 'txnAmount', '17.64' ],
  [ 'txnId', '20181' ],
  [ 'txnType', 'Purchase' ],
  [ 'txnDate', '2015/08/13 21:50:04' ],
  [ 'respCode', '0' ],
  [ 'isoCode', '0' ],
  [ 'authCode', '' ],
  [ 'acquirerInvoice', '0' ],
  [ 'message', '' ],
  [ 'isComplete', 'true' ],
  [ 'isTimeout', 'false' ] ];

const obj= Object.assign(...arr.map(([key, val]) => ({[key]: val})))

相手が配列ならreduceでも同じ結果は作れるんだけど、

arr.reduce((accu, [key, val]) => ({...accu, ...{[key]: val}}), {});

単純にObjectにしたい!!!っていうだけならassignの方が見やすくていいかなと思う。
reduceについては@ginpei_jpさんが書いた詳しい記事があるぞ

See the Pen
PHP array_combine in Javascript
by Tenderfeel (@Tenderfeel)
on CodePen.

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください