前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试遇坎,每日一题我精选了这些题目的答案

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

作者头像
前端进击者
发布2021-07-27 14:26:11
2120
发布2021-07-27 14:26:11
举报
文章被收录于专栏:前端有的玩前端有的玩

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

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

题目一

题目

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

代码语言:javascript
复制
// 一月,二月, 五月的零花钱
{1:200, 2:140, 5:400}

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

代码语言:javascript
复制
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));
答案

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

答案一
代码语言:javascript
复制
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));
答案二
代码语言:javascript
复制
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));
答案三
代码语言:javascript
复制
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

代码语言:javascript
复制
function getCount() {
  
}

// 输出 180
console.log(getCount())
答案
答案一

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

代码语言:javascript
复制
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))
答案二

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

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

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

代码语言:javascript
复制
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因为只有一位数字,所以不算回文数字。

答案
答案一
代码语言:javascript
复制
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))
答案二
代码语言:javascript
复制
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))
答案三
代码语言:javascript
复制
const result = [...Array(10000).keys()].filter((x) =>  x> 10 && x === Number(x.toString().split('').reverse().join('')) )

console.log(result)

题目四

题目

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

代码语言:javascript
复制
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))
答案
答案一
代码语言:javascript
复制
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))
答案二
代码语言:javascript
复制
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))
答案三
代码语言:javascript
复制
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的数据格式

代码语言:javascript
复制
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'
  }
答案
答案一
代码语言:javascript
复制
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
}
答案二
代码语言:javascript
复制
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
}
答案三
代码语言:javascript
复制
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))

总结

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

结语

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端有的玩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目一
    • 题目
      • 答案
        • 答案一
        • 答案二
        • 答案三
    • 题目二
      • 题目
        • 答案
          • 答案一
          • 答案二
          • 答案三
      • 题目三
        • 题目
          • 答案
            • 答案一
            • 答案二
            • 答案三
        • 题目四
          • 题目
            • 答案
              • 答案一
              • 答案二
              • 答案三
          • 题目五
            • 题目
              • 答案
                • 答案一
                • 答案二
                • 答案三
            • 总结
            • 结语
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档