笔试题

69 阅读3分钟

笔试题(sxf)

单选题

1. 
function test(a){ a=a+10; } var a=10; test(a); console.log(a);
上述代码执行后,输出变量a的值为?(102. 
如下代码输出的结果是什么:
console.log(1+ "2"+"2"); //122
console.log(1+ +"2"+"2"); //32
console.log("A"- "B"+"2"); //NaN2
console.log("A"- "B"+2); //NaN

3.
var str1=new RegExp("e");
document.write(str1.exec("hello"));  //e
/*
* RegExp.prototype.exec()  返回匹配结果,如果未发现匹配返回`null`。
*/

4. 
关于 CSS 布局中的 BFC ,描述错误的是 (A)
A. BFC 的区域会与 float 的元素区域重叠
B. 计算 BFC 的高度时,浮动子元素也参与计算
C. BFC 就是页面上的一个隔离的独立容器,容器里面的子元素是不会影响到外面的元素
D. BFC 意为「块级格式化上下文」

问答题

  1. 找出数组 arr 中重复出现过的元素(不用考虑返回顺序), 如输入 [1 ,2,2 ,3, 1, 5, 6, 2, 5],输出 [1, 2, 5]
const arr = [1, 2, 2, 3, 1, 5, 6, 2, 5] // => [1, 2, 5]
function test(arr: number[]) {
  const arrVal = []
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i]
    if (arr.indexOf(item) != arr.lastIndexOf(item)) {
      arrVal.push(item)
    }
  }
  return Array.from(new Set(arrVal))
}
console.log(test(arr))

  1. 实现一维数组合并并去重, 如 a = [1, 2, 3, 4] , b = [1, 2, 5,6],合并得[1, 2, 3, 4, 5, 6 ] (考虑去重)
const a = [1, 2, 3, 4]
const b = [1, 2, 5, 6]
function test(a: number[], b: number[]) {
  const arr = [...a, ...b]
  return Array.from(new Set(arr))
}
console.log(test(a, b))
  1. 实现一个函数,判断数组中的值是否为连值,如输入[2,3,4,5,6]返回true, 输入[4,6,7]返回false
const arr = [2, 3, 4,5, 6]
function test(arr: number[]) {
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i]
    const nextItem = arr[i + 1]
    if (item + 1 != nextItem && nextItem) {
      return false
    }
  }

  return true
}
console.log(test(arr))
  1. 实现一个函数chunk(array, size), 可将数组array拆分成多个size(默认size=1)长度的区块。如果array无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。

如:

chunk(['a', 'b', 'c', 'd'], 2) => [['a', 'b'], ['c', 'd']];

chunk(['a', 'b', 'c', 'd'], 3) => [['a', 'b', 'c'], ['d']]

ps: 向上取整api: Math.ceil()

const arr = [2, 3, 4, 5, 6]
function test(arr: number[], sise: number) {
  const arrVal: any[] = []
  for (let i = 0; i < Math.ceil(arr.length / sise); i++) {
    let start = i * sise
    let end = (i + 1) * sise
    arrVal.push(arr.slice(start, end))
  }

  return arrVal
}
console.log(test(arr, 2))
  1. 实现一个函数zip([arrays]),创建一个分组元素的数组,数组的第一个元素包含所有给定数组的第一个元素,数组的第二个元素包含所有给定数组的第二个元素,以此类推。

如: zip(['Mike', 'Bob'], [18, 19], ['ShenZhen', 'BeiJing']) => [['Mike', 18, 'ShenZhen'], ['Bob', 19, 'BeiJing']]

ps: 仅需考虑最优状态,传入的数组参数长度统一

function zip(arr: any[]) {
  const arrVal: any[] = []
  const maxLength = Math.max(...arr.map((l) => l.length))
  for (let i = 0; i < maxLength; i++) {
    arrVal[i] = arr.map((n) => n[i])
  }
  return arrVal
}
console.log(zip(arr))
  1. git pull后想要回滚到之前的版本,如何操作
git reset --hard <之前的版本号>

git reflog
git reset --hard HEAD

7.以下代码执行结果是什么: +true !'sangfor'

1  false

8.定义接口 people,包含 字符串类型且不可修改的name,数字类型的age,字符串类型且值为可选的sex,布尔类型的pass

interface people {
    readonly name: string,
    age: number,
    sex?: string,
    pass: boolean
}