当前位置: 首页 > 面试经验 >

8.27 京东前端笔试

优质
小牛编辑
94浏览
2023-03-28

8.27 京东前端笔试

题型:20道选择题 + 3道编程题

选择题大杂烩,前端技术占比多一些!

编程题

感谢大佬把题目贴出来

1. 修改字符串前大后小

思路:就是分别处理一下,前面的toUpperCase(),后面的toLowerCase();
let str = "ABCba",n = 3;
console.log(str.substring(0, n).toUpperCase() + str.substring(n).toLowerCase());

2. 打印1-n^2

思路:自己先写几个找找规律,n为奇数,直接从1-n^2顺序打印,每行输出n个;n为偶数,直接从1-n^2顺序打印,每行输出n个,但是奇偶行的顺序得相反,比如n=2时应该是[[1,2],[4,3]],这个只要一用push、一用unshift就好了

function getArr(n) {
  if(n % 2 === 1) {
    let index = n, val = 1;
    while(index) {
      let arr = []
      for(let i = 0; i < n; ++i) {
        arr.push(val)
        val++;
      }
      console.log(arr.join(' '));
      index--
    }

  } else if(n % 2 === 0) {
    let val = 1, index = n;
    while (index) {
      let arr = [];
      for (let i = 0; i < n; ++i) {
        if(index % 2 === 0) {
          arr.push(val);
        } else {
          arr.unshift(val);
        }
        val++;
      }
      console.log(arr.join(" "));
      index--;
    }
  }
}
getArr(4);


3. 长城数,8.20号网易也考了长城数,虽然不完全一样,但是思路有借鉴的地方。最终要保证奇、偶项分别相同,那么就用map记录下奇数项各个值的个数、偶数项各个值的个数,各自取个数最多的那个;注意,如果奇偶个数最多的数相同,就要考虑第二多的了,有一个要变为第二多的那个数,看操作谁的次数最少就用哪个
function getTimes(arr) {
  let oddMap = new Map(),
    evenMap = new Map();
  for(let i = 0; i < arr.length; i++) {
    if(i % 2 === 0) {
      oddMap.set(arr[i], (oddMap.get(arr[i]) || 0) + 1);
    } else {
    evenMap.set(arr[i], (evenMap.get(arr[i]) || 0) + 1);
    }
  }

  // // 找出奇偶的第一和第二大
  let [oddFirstNum, oddFirstCount, oddSecondNum, oddSecondCount] =
    getValue(oddMap);
    let [evenFirstNum, evenFirstCount, evenSecondNum, evenSecondCount] =
      getValue(evenMap);

  function getValue(map) {
   let firstNum, firstCount = 0, secondNum, secondCount = 0;
    for (let [item, value] of map) {
      if (value >= firstCount) {
        secondCount = firstCount;
        firstCount = value;
        secondNum = firstNum;
        firstNum = item;
      } else if (value < firstCount && value > secondCount) {
        secondCount = value;
        secondNum = item;
      }
    }
    return [firstNum, firstCount, secondNum, secondCount]
  }

  // 最终要判断下奇偶最多的数是否相同
  if (evenFirstNum !== oddFirstNum) {
    return arr.length - oddFirstCount - evenFirstCount;
  } else if (evenFirstNum === oddFirstNum) {
    if (oddFirstCount - oddSecondCount >= evenFirstCount - evenSecondCount) {
      return arr.length - oddFirstCount - evenSecondCount;
    } else {
      return arr.length - oddSecondCount - evenFirstCount;
    }
  }
    
}

console.log(getTimes([1, 1, 4, 5, 1, 4])); // 3


#京东##京东笔试##前端##前端工程师#
 类似资料: