出典:JavaScriptの連想配列
 なんでも直ぐ忘れる?、いや元々覚えていないので「基本の基」から。

宣言
配列の宣言:
var 配列の変数名 = ["値a","値b","値c"];
連想配列の宣言:
var 連想配列の変数名 = {キーa:"値a",キーb:"値b",キーc:"値c"};

 厳密にはJavaScriptには連想配列は存在せず、「オブジェクト」または「オブジェクトリテラル」と呼ばれるものだそう。
 よく分からんが、「連想配列」=「オブジェクト」らしい

連想配列をループして取り出す方法
let a = {name:"Mike", sex:"Male"};
a.place = "Tokyo";
for (k in a){
    console.log(k + "は" + a[k] + "です");
}
nameはMikeです
sexはMaleです
placeはTokyoです
連想配列からキー一覧を取得
let a = {name:"Mike", sex:"Male"};
a.place = "Tokyo";
for (k in a){
    console.log(k);
}
name
sex
place
let a = {name:"Mike", sex:"Male"};
a.place = "Tokyo";
console.log(Object.keys(a));
[ 'name', 'sex', 'place' ]
連想配列からデータ一覧を取得
forlet a = {name:"Mike", sex:"Male"};
a.place = "Tokyo";
for(k in a){
    console.log(a[k]);
}
Mike
Male
Tokyo

連想配列のネスト

宣言と取得
var fruits = {
    apple : { "name" : "りんご", "value":100 },
    orange : { "name" : "オレンジ", "value":80 },
    melon : { "name" : "メロン", "value":1000 }
};

for (key in fruits) {
    console.log(key);
    console.log("商品名は" + fruits [key].name +"です");
    console.log("価格は" + fruits [key].value +"円です");
}

apple
商品名はりんごです
価格は100円です
orange
商品名はオレンジです
価格は80円です
melon
商品名はメロンです
価格は1000円です

連想配列のソート

キーでソートする場合
var fruits = [
    apple : { "name" : "りんご", "value":100 },
    orange : { "name" : "オレンジ", "value":80 },
    melon : { "name" : "メロン", "value":1000 }
];
objectkeys = Object.keys(fruits);
console.log("【ソート前】");
for (key of objectkeys){
    console.log(`key: ${key} ,name: ${fruits[key].name} ,value: ${fruits[key].value}`);
}
objectkeys.sort();
console.log("【ソート後】");
for (key of objectkeys){
    console.log(`key: ${key} ,name: ${fruits[key].name} ,value: ${fruits[key].value}`);
}
【ソート前】
key: apple ,name: りんご ,value: 100
key: orange ,name: オレンジ ,value: 80
key: melon ,name: メロン ,value: 1000
【ソート後】
key: apple ,name: りんご ,value: 100
key: melon ,name: メロン ,value: 1000
key: orange ,name: オレンジ ,value: 80
値でソートする場合

 連想配列は厳密には配列ではなく、オブジェクトなので、そのままではソートはできない。
 一度Object.keys()を使用してキーを抜きとり、mapで新たなキー入りの配列を生成する。
 その生成した配列をソートした後、再度オブジェクトに割り当てる必要がある。

({ key: k, value: fruits[k] }));
console.log("【連想配列を配列に変更】");
console.log(array);
array.sort((a, b) => a.value.price - b.value.price);
console.log("【priceで並び替えした配列】");
console.log(array);
//配列⇒オブジェクト で元に戻す
obj = Object.assign({}, ...array.map((item) => ({
    [item.key]: item.value,
})));
console.log("【配列を連想配列に戻す】");
console.log(obj);
【元の連想配列】
{
  apple: { name: 'りんご', price: 100 },
  orange: { name: 'オレンジ', price: 80 },
  melon: { name: 'メロン', price: 1000 }
}
【連想配列を配列に変更】
[
  { key: 'apple', value: { name: 'りんご', price: 100 } },
  { key: 'orange', value: { name: 'オレンジ', price: 80 } },
  { key: 'melon', value: { name: 'メロン', price: 1000 } }
]
【priceで並び替えした配列】
[
  { key: 'orange', value: { name: 'オレンジ', price: 80 } },
  { key: 'apple', value: { name: 'りんご', price: 100 } },
  { key: 'melon', value: { name: 'メロン', price: 1000 } }
]
【配列を連想配列に戻す】
{
  orange: { name: 'オレンジ', price: 80 },
  apple: { name: 'りんご', price: 100 },
  melon: { name: 'メロン', price: 1000 }
}