面試遇坎,每日一題我精選了這些題目與答案

薪資過低欲辭職,面試作題心甚難。javascript

屢屢面試屢遇坎,每日一題快來看。前端

每日工做之餘,我會將本身整理的一些前端面試題筆試題整理成每日一題,而後在公衆號中推送給你們,天天僅需幾分鐘作一道題,通過日積月累,在換工做的時候必定能讓你拿到一個比較好的offer。今天這篇文章是我將近期每日一題中比較好的題目及粉絲們分享的一些答案進行的整理,分享給更多的掘友,但願能夠幫助到你。同時關注公衆號【前端有的玩】,天天早上八點四十分,準時推送每日一題。java

題目一

題目

如今有小編每月老婆給的零花錢清單,可是由於某些緣由,有些月份沒有零花錢,以下數據所示git

// 一月,二月, 五月的零花錢
{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())
複製代碼

答案

答案一

這個答案比較經典,性能也算是很不錯的了markdown

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))
複製代碼

總結

此次整理的這些每日一題都是一些編程題,其中有些仍是咱們平常開發中可能會遇到的問題,經過作這些題也能夠檢驗一下本身對這些實用編程技巧的掌握程度。每日一題來源於公衆號【前端有的玩】,工做日天天早上八點四十分準時推送,每日一題,天天成長一點點。

結語

不要吹滅你的靈感和你的想象力; 不要成爲你的模型的奴隸。 ——文森特・梵高

相關文章
相關標籤/搜索