😎

【JavaScript】連想配列から特定keyのvalueだけの、並び替えた配列を取得する

2022/06/19に公開

ソースコード

// 連想配列
const animalObjs = [
  { id: 1, animal: "tiger" },
  { id: 2, animal: "cat" },
  { id: 3, animal: "pig" },
  { id: 4, animal: "bird" },
  { id: 5, animal: "dog" },
];

// animalの順番オブジェクト
const animalOrderConfigObjs = [
  { order: 1, animal: "pig" },
  { order: 2, animal: "dog" },
  { order: 3, animal: "cat" },
];

// 連想配列からanimalだけ取得した配列
const animalsArray = animalObjs.map((obj) => obj.animal);

// animalsArrayから重複削除
const animalsArrayUnique = [...new Set(animalsArray)];

// animalOrderConfigObjsを並び替える
animalOrderConfigObjs.sort(function (x, y) {
  return (
    animalsArrayUnique.indexOf(x.order) - animalsArrayUnique.indexOf(y.order)
  );
});

// 並び替えたcanimalOrderConfigObjsのanimalだけ取得
const orderedAnimalsArray = animalOrderConfigObjs.map((odr) => odr.animal);

// orderedAnimalsArrayとanimalsArrayUniqueの差分を取得
const unorderedAnimalsArray = animalsArrayUnique.filter(
  (i) => orderedAnimalsArray.indexOf(i) == -1
);

// orderedAnimalsArrayとunorderedAnimalsArrayを結合(animalOrderConfigObjs通りの順番→残りはanimalObjs通りの順番になる)
const animals = [...orderedAnimalsArray, ...unorderedAnimalsArray];

参考リンク

個人用blogにも書いた

メモくらい適当にアウトプットしているblogにも書いたのですが、使う機会あるかもしれないので、
こっちにもそのまま書きます。

Discussion