從今天開始,我從面試題切入開始做一些詳解和記錄,爭取沒個工作日一篇!歡迎關注吐槽!
const obj = {
a: 1,
b: 3,
c: -3,
f: 5,
d: 8
}
要求以對象value的大小排序返回[c,a,b,f,d]
問題解析:
1、對象是無序的,我們需要轉爲有序數據結構,其實也就是轉爲數組然後後再去排序。
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!
在來個es6的方法
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,看下圖:
解析完畢!
您的點贊or吐槽是我持續下去的動力!