Mapオブジェクトをソートして、その順番を処理に使いたいのですが、ループ内でindexを取る方法が思いつきません。
以下の様に、初めa(order=2), b(order=3), c(order=1)に設定されていたものをa(order=1), b(order=2), c(order=3)と変えたいのですがどのようにすればよいでしょうか?
→ 初めの並びを変更するようなアルゴリズムを作るのが目的です。
Mapを用いれば(キーがあるので順番の変更を追尾できる)できるかと思ったんですが、もしかしたら別のアプローチがあればその方法もご教授願いたく。
javascript
1 2const map = new Map(); 3map.set("c", {order: 1}); 4map.set("a", {order: 2}); 5map.set("b", {order: 3}); 6 7// before sort 8Map (3) { 9 "c" => {"order": 1}, 10 "a" => {"order": 2}, 11 "b" => {"order": 3} 12} 13 14const sort = new Map([...map].sort((a,b) => a[0] > b[0])); // 名前順によってソート 15 16// 17sort.foreach(...???) 18 19// 期待値 20// after sort 21Map (3) { 22 "a" => {"order": 1}, 23 "b" => {"order": 2}, 24 "c" => {"order": 3} 25} 26 27
愚直?な方法
javascript
1 2let idx = 0; 3for(const [key, obj] of sortMap) { 4 obj.order = idx; 5 idx ++; 6}; 7
ですが、より良い方法はありますかね?(Mapを使わずともシンプルな代替案があれば)
回答2件
あなたの回答
tips
プレビュー