资讯专栏INFORMATION COLUMN

让前端面试不在难(常见算法一)

sunny5541 / 3420人阅读

摘要:今天开始,我从面试题切入开始做一些详解和记录,争取每个工作日一篇欢迎关注吐槽要求以对象的大小排序返回问题解析对象是无序的,我们需要转为有序数据结构,其实也就是转为数组然后后再去排序。

今天开始,我从面试题切入开始做一些详解和记录,争取每个工作日一篇!欢迎关注吐槽!

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吐槽是我持续下去的动力!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/101383.html

相关文章

  • 前端面试不再常见算法

    摘要:昨天聊了一个算法题,今天接着聊多聊几个。如果是是数组那么递归执行,并把当前和已有传进去继续。如果不是直接到第二种,逻辑一样只不过遍历换成了,如果读的比较困难请移步了解第三种比较简单会默认过滤数组内部,算是一个奇淫技巧。 昨天聊了一个算法题,今天接着聊!多聊几个。 1、拍平数组(多维数组变成一维数组) let arr = [1,[2,3,[4],[5,6,[7]]],8]//...

    nanchen2251 评论0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件开发前端掘金作者原文地址译者插件是为应用添加全局功能的一种强大而且简单的方式。提供了与使用掌控异步前端掘金教你使用在行代码内优雅的实现文件分片断点续传。 Vue.js 插件开发 - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins译者:jeneser Vue.js插件是为应用添加全局功能的一种强大而且简单的方式。插....

    izhuhaodev 评论0 收藏0
  • 前端面试不在(深度克隆 clone)

    摘要:今天聊一下这个前端面试高频问题,由此引出这些。下面我们先详细的聊一下,完了解决下面试官的问题。数组之所以为是因为上边说了和其实就是想说这两个对于深度的实现来说不够严谨要不就是多层判断。 今天聊一下clone这个前端面试高频问题,由此引出typeof、instanceof、Object.prototype.toString这些javascript Api。 下面我们先详细的聊一下,完了解...

    hover_lew 评论0 收藏0
  • Android-Java面试

    摘要:好不容易在月号这天中午点左右接到了来自阿里的面试电话。这里会不断收集和更新基础相关的面试题,目前已收集题。面试重难点的和的打包过程多线程机制机制系统启动过程,启动过程等等扫清面试障碍最新面试经验分享,此为第一篇,开篇。 2016 年末,腾讯,百度,华为,搜狗和滴滴面试题汇总 2016 年未,腾讯,百度,华为,搜狗和滴滴面试题汇总 各大公司 Java 后端开发面试题总结 各大公司 Jav...

    TalkingData 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<