Интервью сложное, я выбрал эти вопросы и ответы на один вопрос дня

JavaScript опрос

Зарплата слишком низкая, и я хочу уйти в отставку.Очень сложно отвечать на вопросы на собеседовании.

Повторные интервью натолкнулись на препятствия, поэтому приходите и смотрите по одному вопросу в день.

В свободное время я организую несколько предварительных вопросов для интервью и письменные тестовые вопросы, которые я организую в ежедневный вопрос, а затем отправлю его всем в официальном аккаунте.На один вопрос в день уходит всего несколько минут. , Вы получите лучшийoffer. Сегодняшняя статья представляет собой подборку некоторых из лучших вопросов из недавнего ежедневного вопроса и некоторых ответов, которыми поделились фанаты и друзья, которые копают, в надежде помочь вам. В то же время, обратите внимание на публичный аккаунт [Некоторые играют на фронтенде] и отправляйте ежедневный вопрос вовремя в 8:40 каждое утро.

Тема 1

тема

Теперь есть список карманных денег, который моя жена дает каждый месяц, но по некоторым причинам в некоторые месяцы нет карманных денег, как показано в следующих данных.

// 一月,二月, 五月的零花钱
{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));

тема вторая

тема

пожалуйста вывод1прибыть400Количество единиц, содержащихся во всех числах между ними, например числах1содержит1, количество11содержит два1,количество20не входит в1,количество1прибыть21ККТ включает13индивидуальный1.

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))

Суммировать

Эти ежедневные вопросы, разобранные на этот раз, представляют собой некоторые вопросы по программированию, некоторые из которых представляют собой проблемы, с которыми мы можем столкнуться в нашей повседневной разработке.Выполняя эти вопросы, вы также можете проверить свое мастерство в этих практических навыках программирования. Один вопрос в день поступает из официального аккаунта [Некоторые играют на фронтенде], он доставляется вовремя в 8:40 каждое утро в будние дни, один вопрос в день и немного роста каждый день.

Эпилог

Не истощайте свое вдохновение и воображение, не будьте рабом своих моделей. - Винсент Ван Гог