专栏首页前端有的玩面试遇坎,每日一题我精选了这些题目的答案

面试遇坎,每日一题我精选了这些题目的答案

薪资太低欲辞职,面试做题心甚难。 屡屡面试屡遇坎,每日一题快来看。

每日工作之余,我会将自己整理的一些前端面试题笔试题整理成每日一题,然后在公众号中推送给大家,每天仅需几分钟做一道题,经过日积月累,在换工作的时候一定能让你拿到一个比较好的offer。今天这篇文章是我将近期每日一题中比较好的题目及粉丝们分享的一些答案进行的整理,分享给更多的掘友,希望可以帮助到你。同时关注公众号【前端有的玩】,每天早上八点四十分,准时推送每日一题。

题目一

题目

现在有小编每个月老婆给的零花钱清单,但是因为某些原因,有些月份没有零花钱,如下数据所示

// 一月,二月, 五月的零花钱
{1:200, 2:140, 5:400}

请将上面的数据格式转换为[200, 140, null, null, 400, null, null, null, null, null, null, null],其中数组的长度为12,对应十二个月,请完善下面代码

const obj = { 1: 200, 2: 140, 5: 400 };
function translate(obj) {
  // 请在此处添加代码
}
// 输出 [200, 140, null, null, 400, null, null, null, null, null, null, null]
console.log(translate(obj));

答案

这道题答案可以有许多中,以下罗列了几个群友贡献的答案,为您提供参考

答案一
const obj = { 1: 200, 2: 140, 5: 400 };
function translate(obj) {
  return  Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
}
// 输出 [200, 140, null, null, 400, null, null, null, null, null, null, null]
console.log(translate(obj));
答案二
const obj = { 1: 200, 2: 140, 5: 400 };
function translate(obj) {
  return Object.assign(Array(13).fill(null), obj).slice(1);
}
// 输出 [200, 140, null, null, 400, null, null, null, null, null, null, null]
console.log(translate(obj));
答案三
const obj = { 1: 200, 2: 140, 5: 400 };
function translate(obj) {
   // 请在此处添加代码
    let result = Array(12).fill(null)
    Object.entries(obj).forEach(([key, value]) => {
        result[key - 1] = value;
    });

    return result;
}
// 输出 [200, 140, null, null, 400, null, null, null, null, null, null, null]
console.log(translate(obj));

题目二

题目

请输出1400之间所有数字中包含的1的个数,比如数字1中包含了一个1, 数字11中包含了两个1,数字20中不包含1,数字121中共包含了131

function getCount() {
  
}

// 输出 180
console.log(getCount())

答案

答案一

这个答案比较经典,性能也算是很不错的了

const sum1s = num => {
  let numstr
  if (!num) return 0
  if (typeof num === 'string') numstr = num
  else numstr = String(num)

  if (Number(numstr) === 0) return 0

  const curr =
    numstr[0] > 1
      ? 10 ** (numstr.length - 1) +
        numstr[0] * (numstr.length - 1) * 10 ** (numstr.length - 2)
      : sum1s(10 ** (numstr.length - 1) - 1) + 1

  return curr + sum1s(numstr.substr(1))
}

// 输出 180
console.log(sum1s(400))
答案二

这个用到了正则,不过对于长字符串正则可能性能会有点点差

function countOne(num){
    // num为正整数,方法有点儿暴力
    return Array.from({length:num},(v,i)=>i+1).join('').replace(/[^1]/g,'').length
}
console.log(countOne(400))
答案三

下面这个答案算是中规中矩的答案了,将每一个数字转换为字符串然后统计1的个数

function getCount() {
  let count = 0
  for(let i=1;i<400;i++) {
    count = count + `${i}`.split('1').length - 1
  }
  return count
}

// 输出 180
console.log(getCount())

题目三

垂帘画阁画帘垂,谁系怀思怀系谁?影弄花枝花弄影,丝牵柳线柳牵丝。这是一首回文诗,即每一句诗正向反向读都是一样的。下面这道题是一道回文数字,即数字正向反向读都是一样的,比如11,1221,2112等等。

题目

请打印出1 - 10000 之间的所有回文数字。其中1~9因为只有一位数字,所以不算回文数字。

答案

答案一
const palindrome = length => {
  const res = []
  const digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

  const add = (current, length) => {
    if (length <= 1) return
    digits.forEach(digit => {
      res.push(digit + current + digit)
      add(digit + current + digit, length - 2)
    })
  }
  digits.forEach(num => {
    add(num, length - 1)
    res.push(num + num)
    add(num + num, length - 2)
  })
  return res.filter(num => !num.startsWith('0'))
}
// 总共189个
console.log(palindrome(4))
答案二
function palindrome (max) {
  return Array(max + 1).fill('').reduce((a, c, i) => {
    if (i > 10) {
      const arr = Array.from(`${i}`)
      const [x, y] = [`${i}`, arr.reverse().join('')]
      x === y && a.push(i)
    }
    return a
  }, [])
}
// 总共189个
console.log(palindrome(10000))
答案三
const result = [...Array(10000).keys()].filter((x) =>  x> 10 && x === Number(x.toString().split('').reverse().join('')) )

console.log(result)

题目四

题目

请实现下面代码中的函数fn,使其可以输出指定id对应的所有父id及其自身id

const data = [
            {
                id: 1,
                name: '222',
                children: [{
                    id: 2,
                    name: '34',
                    children: [{
                        id: 112,
                        name: '334',
                    }, {
                        id: 113,
                        name: '354',
                    }
                    ]
                }]
            }
        ]
   
   function fn(id) {
       
   }
 
   // 输出  [1, 2, 112]
  console.log(fn(112))

答案

答案一
const data = [
            {
                id: 1,
                name: '222',
                children: [{
                    id: 2,
                    name: '34',
                    children: [{
                        id: 112,
                        name: '334',
                    }, {
                        id: 113,
                        name: '354',
                    }
                    ]
                }]
            }
        ]

function fn(id) {
  const res = []
  const find = _ => {
    if (!_) return
    return _.find(item => (item.id === id || find(item.children)) && res.push(item.id))
  }
  find(data)
  return res.reverse()
}

console.log(fn(112))
答案二
const fn = (id, ancestors = [], current = data) => {
  for (let i = 0; i < current.length; i++) {
    if (current[i].id === id) return ancestors.concat(id)
    if (current[i].children && current[i].children.length) {
      const ret = fn(id, ancestors.concat(current[i].id), current[i].children)
      if (ret) return ret
    }
  }
}

console.log(fn(112))
答案三
function fn(id) {
  const arr = []
  const getIds = (ids) => {
    for (const v of ids) {
      arr.push(v.id)
      if (v.id === id) {
        return
      } else if (v.children) {
        getIds(v.children)
      } else {
        arr.pop()
      }
    }
  }
  getIds(data)
  return arr
}

console.log(fn(112))

题目五

题目

请实现函数,将entry转换为output的数据格式

const entry = {
  'a.b.c.dd': 'abcdd',
  'a.d.xx': 'adxx',
  'a.e': 'ae'
}

// 要求转换成如下对象
const output = {
  a: {
    b: {
      c: {
        dd: 'abcdd'
      }
    },
    d: {
      xx: 'adxx'
    },
    e: 'ae'
  }

答案

答案一
function transform(obj) {
  const res = {}
  for (let [keys, value] of Object.entries(obj)) {
    keys
      .split('.')
      .reduce((prev, cur, idx, arr) =>
        prev[cur] = prev[cur] || (arr[idx + 1] ? {} : value)
        , res)
  }
  return res
}
答案二
const transform = (input: { [P in string]: string }): Object => {
  const ret = {}
  Object.entries(input).forEach(([keys, val]) => {
    let root = ret
    keys.split('.').forEach((key, ind, arr) => {
      if (ind === arr.length - 1) root[key] = val
      else {
        root[key] = root[key] || {}
        root = root[key]
      }
    })
  })
  return ret
}
答案三
const entry = {
				'a.b.c.dd': 'abcdd',
				'a.d.xx': 'adxx',
				'a.e': 'ae',
			}
const convert = (data) => {
  let res = {}
  const entries = Object.entries(data)
  for (let i = 0; i < entries.length; i++) {
    let temp = res
    let [key, value] = entries[i]
    const everyOne = key.split('.')
    for (let j = 0; j < everyOne.length; j++) {
      if (j === everyOne.length - 1) {
        temp[everyOne[j]] = value
      }
      temp[everyOne[j]] = temp[everyOne[j]] || {}
      temp = temp[everyOne[j]]
    }
  }
  return res
}
console.log(convert(entry))

总结

这次整理的这些每日一题都是一些编程题,其中有些还是我们日常开发中可能会遇到的问题,通过做这些题也可以检验一下自己对这些实用编程技巧的掌握程度。每日一题来源于公众号【前端有的玩】,工作日每天早上八点四十分准时推送,每日一题,每天成长一点点。

结语

不要吹灭你的灵感和你的想象力; 不要成为你的模型的奴隶。 ——文森特・梵高

本文分享自微信公众号 - 前端有的玩(gh_918bae0a9616),作者:前端进击者

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android面试遇坎,我精选了这些题目与答案,你离大厂还有多远测试一下就知道!

    又要到金九银十的跳槽季了,为了让更多的小伙伴可以在面试的时候取的更好的offer,每日工作之余,我都会将自己整理的一些Android面试题笔试题整理成每日一题,...

    Android技术干货分享
  • 上课!腾讯课堂的备战时刻

    ? “我太难了”。 除夕当晚,当开学延期的消息一出,高考应届生方方的班级群里瞬间被“我太难了”的表情包刷屏。 离高考只有100多天,如今延期,冲刺时刻只能在...

    鹅老师
  • MIT分布式运算革新机器学习算法

    从语音识别系统到自助停车等人工智能领域,“机器学习”的最新进展总能吸引大众的眼球。 所谓机器学习,就是让计算机在数据库中搜索特定模型从而获得新技能,以及让自主机...

    机器人网
  • 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!

    你花了大半天整合了一张数据表,却因为其他部门的错误,导致表格结构全错了!于是你又要吭哧吭哧重新来过...

    养码场
  • 【大数据】用数据分析告诉你爱情的残酷真相

    导读   信息专家分析了成千上万条可怕又令人心碎的分手数据后,发现人们其实可以预测到恋人的关系可能会以什么方式来结束。   先来看则好消息:每天约有300万情...

    小莹莹
  • MEET正在发声:我们的教育,我们的故事

    ? 特殊学校的“失语症”女孩,千年古村的英语小达人,边疆山区的留守儿童,灾区重建学校的英语老师,被一部手机激活的百年老校,充满“智慧”的未来学校……这些看起来...

    鹅老师
  • 这10道经典软件测试题,你都会么?

    大家好,我是《软件测试52讲》专栏的作者茹炳晟,我用我16年的测试知识和经验,梳理出了这一整套软件测试的知识专栏。

    IDO老徐
  • 美团数据库运维自动化系统构建之路

    美团点评技术沙龙由美团点评技术团队主办,每月一期。每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。 目前沙龙会分别在北...

    美团技术团队
  • 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!

    你花了大半天整合了一张数据表,却因为其他部门的错误,导致表格结构全错了!于是你又要吭哧吭哧重新来过……

    华章科技
  • 看技术的角度

    每次面试,我都是幸运的,就像校招的时候,被问到了一个曾经研究过的脑力题一样。这回,也没有像一部分同仁那样,来回的跑,专场,半天完事,剩下的就是等流程,虽然现在还...

    Coder的技术之路
  • 程序员的三十岁究竟在迷茫什么?

    这是京程一灯一位学员找工作的时候,还没谈技术之前的面试条件。三十岁已经成了程序员的一道坎儿。

    疯狂的技术宅
  • 别人Python都玩腻了,而你却连安装工具库都搞不清楚!

    9:00 你打开电脑,双击各部门交上来的周报,轻车熟路地开始了crtlC,ctrlV工作,把表格统计在一起。 15:00 你发现投资部的表格里多了一个字段,导致...

    昱良
  • 一周AI要闻回顾 | FB新研究颠覆CNN,加州新政允许无人卡车路测

    量子位筛选整理出过去一周Top 10,从技术新突破、政策新风向和产业新动态3大方面,为你提供最新趋势参考。

    量子位
  • 企业面试题:关于js闭包

    想要做前端工程师的小伙伴儿们,不管你是刚出师门还是已经工作了几年,进入到一个新公司的时候必然经过的一道坎儿就是考试,一般分为笔试、面试、机试等。

    舒克
  • 一个10年工作经验程序员的成长故事

    很多新手程序员在面对自己的岗位和职业发展的时候,都会希望能得到过来人的指引,帮助自己少走弯路,更快的成长,老九君为小伙伴们整理了一位在互联网公司工作十年的技术专...

    老九君
  • 从一个故障案例看强大到令人发紫的Oracle数据库--我和数据中心的故事

    作为一名混迹数据库江湖十几年的老DBA,当你对关系型数据库的了解越来越深入时,你会发现,Oracle数据库真的是强大到令人发紫! Oracle数据库的强大,不仅...

    数据和云
  • 过了技术面却在HR面被刷?必备40问!从容应对HR,斩获N多大厂offer!

    “当时技术好,但就是不会面试。”朋友公司一高级程序员摸着锃亮的光头,喜欢和刚入行的程序员讲以前的故事。

    养码场
  • 2018总结之一个有仪式感的2019启航

    岁月不居,时节如流,转眼间都到2019年1月中旬了,时间过的好快,说好的周末睡到自然醒,但还是跟以往一样,到上班时间就醒了,这算不算心里只有工作呢?

    苏南
  • ​面试中的小妙招!

    遇到这种情况不要慌,可以跟面试官说:“我想一下”,给自己一点缓冲时间。(如果是完全不会的,就别这样了,直接说:”这个不太了解跳过就好“)

    小林coding

扫码关注云+社区

领取腾讯云代金券