ES6:连女朋友看了都喜欢的小知识-如何排序一个Map对象

3,494 阅读2分钟

image.png 大家好,我是林三心,众所周知(不要问我谁是“众所”),Map 是 ES6 中新增的数据结构,Map 类似于对象,但普通对象的 key 必须是字符串或者数字,而 Map 的 key 可以是任何数据类型,那么如何排序一个Map对象呢?啊?Map还能排序呀?看看呗

设置一个乱序的Map对象

const map = new Map() // 我偏偏要乱序,你能咋地
map.set(2, '林二心')
map.set(1, '林一心')
map.set(5, '林五心')
map.set(4, '林四心')
map.set(3, '林三心')
console.log(map) // Map { 2 => '林二心', 1 => '林一心', 5 => '林五心', 4 => '林四心', 3 => '林三心' }

Array.from(此方法可将一个类数组对象或者可遍历对象转换成真正数组)

const map = new Map()
map.set(2, '林二心')
map.set(1, '林一心')
map.set(5, '林五心')
map.set(4, '林四心')
map.set(3, '林三心')
console.log(map) // Map { 2 => '林二心', 1 => '林一心', 5 => '林五心', 4 => '林四心', 3 => '林三心' }
const arr = Array.from(map)
console.log(arr) /* [ [ 2, '林二心' ],
                      [ 1, '林一心' ],
                      [ 5, '林五心' ],
                      [ 4, '林四心' ],
                      [ 3, '林三心' ] ] */

排序(本文章只是举个例子,具体怎么排序还得看转出来的arr是怎么样的)

const map = new Map()
map.set(2, '林二心')
map.set(1, '林一心')
map.set(5, '林五心')
map.set(4, '林四心')
map.set(3, '林三心')
console.log(map) // Map { 2 => '林二心', 1 => '林一心', 5 => '林五心', 4 => '林四心', 3 => '林三心' }
const arr = Array.from(map)
console.log(arr) /* [ [ 2, '林二心' ],
                      [ 1, '林一心' ],
                      [ 5, '林五心' ],
                      [ 4, '林四心' ],
                      [ 3, '林三心' ] ] */
arr.sort((a, b) => a[0] - b[0])
console.log(arr) /* [ [ 1, '林一心' ],
                      [ 2, '林二心' ],
                      [ 3, '林三心' ],
                      [ 4, '林四心' ],
                      [ 5, '林五心' ] ] */

转回Map对象(Map( [ [a, b], [c, d] ] )会生成 { a => b, c => d }Map对象)

const map = new Map()
map.set(2, '林二心')
map.set(1, '林一心')
map.set(5, '林五心')
map.set(4, '林四心')
map.set(3, '林三心')
console.log(map) // Map { 2 => '林二心', 1 => '林一心', 5 => '林五心', 4 => '林四心', 3 => '林三心' }
const arr = Array.from(map)
console.log(arr) /* [ [ 2, '林二心' ],
                      [ 1, '林一心' ],
                      [ 5, '林五心' ],
                      [ 4, '林四心' ],
                      [ 3, '林三心' ] ] */
arr.sort((a, b) => a[0] - b[0])
console.log(arr) /* [ [ 1, '林一心' ],
                      [ 2, '林二心' ],
                      [ 3, '林三心' ],
                      [ 4, '林四心' ],
                      [ 5, '林五心' ] ] */
const map2 = new Map(arr) // 成功转化
console.log(map2) // Map { 1 => '林一心', 2 => '林二心', 3 => '林三心', 4 => '林四心', 5 => '林五心' }

知识点:Map对象的设置方法,转换方法,以及Array的from方法。加油!你们会有女朋友的!!!