[JavaScript]連想配列を値で並び替え|2001Y.me

face-api.jsを使うことで、このように表情を分析することができました。次にこの中から、数値の大きいもの(以下のデータだとhappy)を取得したいです。そのため、まずは連想配列を値で並び替える必要があります。

{
  "neutral"  : 0.0008843988180160522,
  "happy"    : 6.794687124056509e-7,
  "sad"      : 0.000006560272140632151,
  "angry"    : 1.307630128621895e-7,
  "fearful"  : 0.005575541406869888,
  "disgusted": 3.874205489751148e-8,
  "surprised": 0.993532657623291
}

連想配列(オブジェクト)を値で並び替え(ソート)

連想配列の場合、ソートはできないという記事も多かったのですが、こちらを参考にしたところ、うまくいきました。

let expressionList = {
  "neutral"  : 0.0008843988180160522,
  "happy"    : 6.794687124056509e-7,
  "sad"      : 0.000006560272140632151,
  "angry"    : 1.307630128621895e-7,
  "fearful"  : 0.005575541406869888,
  "disgusted": 3.874205489751148e-8,
  "surprised": 0.993532657623291
};

let pairs = Object.entries(expression);
pairs.sort(function(p1, p2){
  let p1Key = p1[0],
      p2Key = p2[0];
  if(p1Key < p2Key){ return -1; }
  if(p1Key > p2Key){ return 1; }
  return 0;
})
expression = Object.fromEntries(pairs);


console.log(expression);
> {
>   "happy"    : 6.794687124056509e-7,
>   "disgusted": 3.874205489751148e-8,
>   "angry"    : 1.307630128621895e-7,
>   "surprised": 0.993532657623291,
>   "fearful"  : 0.005575541406869888,
>   "neutral"  : 0.0008843988180160522,
>   "sad"      : 0.000006560272140632151
> }

これだとソートしただけなので、次に連想配列の最初のキーと値を取得して行きたいと思います。

lightbox