配列を元にソートをする

仕事で度々使うので忘れないようにメモしておく。
度々配列で格納されたIDなんか元に別のオブジェクトや配列をソートしたい場合がある。
そんなときに以下のようなコードでソートが行えます

let items = [
  ['Anne', 'a'],
  ['Bob', 'b'],
  ['Henry', 'b'],
  ['Andrew', 'd'],
  ['Jason', 'c'],
  ['Thomas', 'b']
];

const sorting = ['b', 'c', 'b', 'b', 'c', 'd'];
const result: string[][] = [];

sorting.forEach((key) => {
  let found = false;
  items = items.filter((item) => {
    if (!found && item[1] == key) {
      result.push(item);
      found = true;
      return false;
    } else return true;
  });
});

result.forEach(function (item) {
  console.log(item[0]); /// Bob Jason Henry Thomas Andrew
});

オブジェクトも同じ

   let items = [
      {id: 'a', name: 'Anne'},
      {id: 'b', name: 'Bob'},
      {id: 'b', name: 'Henry'},
      {id: 'd', name: 'Andrew'},
      {id: 'c', name: 'Jason'},
      {id: 'b', name: 'Thomas'}
    ];
    const sorting = ['b', 'c', 'b', 'b', 'c', 'd'];
        const result = [];
        sorting.forEach((key) => {
          let found = false;
          items.forEach((item) => {
            if (!found && item.id === key) {
              result.push(item);
              found = true;
              return false;
            } else return true;
          });
        });
    console.log(result);

参考リンク

関連記事