让前端面试不在难(一)

5次阅读

共计 1417 个字符,预计需要花费 4 分钟才能阅读完成。

今天开始,我从面试题切入开始做一些详解和记录,争取每个工作日一篇!欢迎关注吐槽!
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 吐槽是我持续下去的动力!

正文完
 0