今天開始,我從面試題切入開始作一些詳解和記錄,爭取每一個工做日一篇!歡迎關注吐槽!es6
const obj = { a: 1, b: 3, c: -3, f: 5, d: 8 }
要求以對象value的大小排序返回[c,a,b,f,d]面試
問題解析:json
一、對象是無序的,咱們須要轉爲有序數據結構,其實也就是轉爲數組而後後再去排序。 2.按value排序簡單,但要求是輸入key對應的排序,咱們須要想辦法作對應關係
function sortObj(obj) { //先轉爲數組 let arr = [] // 遍歷json 方法有 Object.keys() for in 用keys之後還得繼續遍歷key數組,在這咱們選用for in for (let item in obj) { // 這一步很關鍵,咱們須要能按照value排序,有須要作key的對應關係,個人作法是這樣的 // 把json的每一項push到數組裏,並拆分原對象key和value分別對應 arr.push({ key: item, value: obj[item] }) } console.log(arr) } sortObj(obj)
打印數組:數組
接下來就簡單多了,多於的數組排序方法我就不一一寫了,本次只爲解決問題數據結構
function sortObj(obj) { //先轉爲數組 let arr = [] // 遍歷json 方法有 Object.keys() for in 用keys之後還得繼續遍歷key數組,在這咱們選用for in for (let item in obj) { // 這一步很關鍵,咱們須要能按照value排序,有須要作key的對應關係,個人作法是這樣的 // 把json的每一項push到數組裏,並拆分原對象key和value分別對應 arr.push({ key: item, value: obj[item] }) } arr = arr.sort((a, b) => { return a.value - b.value }) console.log(arr) } sortObj(obj)
此時結果爲以value有序的數組了
接下來遍歷數組生成結果測試
function sortObj(obj) { //先轉爲數組 let arr = [] // 遍歷json 方法有 Object.keys() for in 用keys之後還得繼續遍歷key數組,在這咱們選用for in for (let item in obj) { // 這一步很關鍵,咱們須要能按照value排序,有須要作key的對應關係,個人作法是這樣的 // 把json的每一項push到數組裏,並拆分原對象key和value分別對應 arr.push({ key: item, value: obj[item] }) } arr = arr.sort((a, b) => { return a.value - b.value }) console.log(arr) return arr.map((item) => { return item.key }) } console.log(sortObj(obj))
測試ok!spa
在來個es6的方法3d
let newArr = Object.entries(obj).sort((a, b) => { return a[1] - b[1] }).map((item) => { return item[0] }) console.log(newArr)
這個方法看起來很騷,其實原理和最開始的解析相似,Object.entries(obj) 會輸出一個數組,數組的每一項是一個數組,內容每一項是原對象每一項的key和value,看下圖:code
解析完畢!對象
您的點贊or吐槽是我持續下去的動力!