特定のオブジェクトを先頭に移動させる

たまに使うのだが忘れてしまうのでメモしておく

const lang = ['JavaScript', 'PHP'];

const langList = [
    {id:'Go'},
    {id:'R'},
    {id:'Python'},
    {id:'Java'},
    {id:'C'},
    {id:'JavaScript'},
    {id:'PHP'}
];

langList.sort((a,b) => {
    const aFlg = lang.includes(a.id)
    const bFlg = lang.includes(b.id)
    if((aFlg && bFlg) || (!aFlg && !bFlg)) {
        return 0
    }
    if (aFlg) {
        return -1
    }
    return 1
});
console.log(langList);

Tips

おまけ
ソートを実行すると中身のオブジェクトや配列はソートされてしまう。
もしもソートさせたくない場合は対象をコピーすることで回避できる。

配列をコピーする方法

const arr = ['PHP', 'JavaScript'];
const array = [...arr];
console.log(array); // ['PHP', 'JavaScript']

Objectをコピーする方法

const obj = {
  1: 'Go',
  2: 'R'
};
const object = Object.assign({}, obj);
console.log(object); // { 1: 'Go', 2: 'R' };

関連記事