Javascript, Snipet

複数の配列に含まれるすべての値について配列ごとに存在を確認する

日本語が難しい…入力した複数の配列に含まれる要素毎に、それぞれの配列に含まれているかを調べる。効率はともかく、for を使わないで書こうとすると以下のようになる。使えるかはともかく…

import { uniq } from 'lodash';

const arrays = [
  [ 1, 2, 4, 6 ],
  [ 1, 7 ],
  [ 2, 3, 4 ]
];

// 複数の配列を連結して重複を取り除く
const merged = uniq( arrays.reduce( ( merged, array ) => merged.concat( array ), [] ) ).sort();
console.log( merged );
// merged = [ 1, 2, 3, 4, 6, 7 ]

// 配列毎に merged の要素が含まれるかの判定
const exists = arrays.map( array => merged.map( x => array.indexOf( x ) >= 0 ) );
console.log( exists );
// exists = [
//     1      2      3      4      6      7 が含まれるかどうか↓
//   [ true,  true,  false, true,  true,  false ],
//   [ true,  false, false, false, false, true  ],
//   [ false, true,  true,  true,  false, false ]
// ]

// CSVとして書き出し
const output = createWriteStream( './test.csv', 'utf8' );
merged.forEach( (x,i) => {
  output.write( [ x, ...exists.map( e => e[i] ) ].join(',') + '\n' );
} );

コメントを残す