JS面试题汇总(六),真牛皮

24 阅读6分钟

算法

  1. 冒泡排序

  2. 选择排序

  3. 快速排序

  4. 二叉树查找: 最大值、最小值、固定值

  5. 二叉树遍历

  6. 二叉树的最大深度

  7. 给予链表中的任一节点,把它删除掉

  8. 链表倒叙

  9. 如何判断一个单链表有环

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:docs.qq.com/doc/DSmRnRG… 当文件传输中断之后用户再次选择文件就可以通过标识来判断文件是否已经上传了一部分,如果是的话,那么我们可以接着上次的进度继续传文件,以达到续传的功能。

有了 HTML5 的 File api 之后切割文件比想想的要简单的多的多。

只要用 slice 方法就可以了

var packet = file.slice(start, end);

参数 start 是开始切片的位置,end 是切片结束的位置 单位都是字节。通过控制 start 和 end 就可以是实现文件的分块

file.slice(0,1000);

file.slice(1000,2000);

file.slice(2000,3000);

// ......

在把文件切成片之后,接下来要做的事情就是把这些碎片传到服务器上。

如果中间掉线了,下次再传的时候就得先从服务器获取上一次上传文件的位置,然后以这个位置开始上传接下来的文件内容。

解析:参考

58. 数组的常用方法

参考答案:

1. Array. map()

此方法是将数组中的每个元素调用一个提供的函数,结果作为一个新的数组返回,并没有改变原来的数组

let arr = [1, 2, 3, 4, 5];

let newArr = arr.map(x => x * 2);

//arr= [1, 2, 3, 4, 5] 原数组保持不变

//newArr = [2, 4, 6, 8, 10] 返回新数组

2. Array. forEach()

此方法是将数组中的每个元素执行传进提供的函数,没有返回值,直接改变原数组,注意和 map 方法区分

let arr = [1, 2, 3, 4, 5];

num.forEach(x => x * 2);

// arr = [2, 4, 6, 8, 10] 数组改变,注意和map区分

3. Array. filter()

此方法是将所有元素进行判断,将满足条件的元素作为一个新的数组返回

let arr = [1, 2, 3, 4, 5]

const isBigEnough => value => value >= 3

let newArr = arr.filter(isBigEnough)

//newNum = [3, 4, 5] 满足条件的元素返回为一个新的数组

4. Array. every()

此方法是将所有元素进行判断返回一个布尔值,如果所有元素都满足判断条件,则返回 true,否则为 false:

let arr = [1, 2, 3, 4, 5]

const isLessThan4 => value => value < 4

const isLessThan6 => value => value < 6

arr.every(isLessThan4) //false

arr.every(isLessThan6) //true

5. Array. some()

此方法是将所有元素进行判断返回一个布尔值,如果存在元素都满足判断条件,则返回 true,若所有元素都不满足判断条件,则返回 false:

let arr = [1, 2, 3, 4, 5]

const isLessThan4 => value => value < 4

const isLessThan6 => value => value > 6

arr.some(isLessThan4) //true

arr.some(isLessThan6) //false

6. Array. reduce()

此方法是所有元素调用返回函数,返回值为最后结果, 传入的值必须是函数类型:

let arr = [1, 2, 3, 4, 5];

const add = (a, b) => a + b;

let sum = arr.reduce(add);

//sum = 15 相当于累加的效果

与之相对应的还有一个 Array. reduceRight() 方法,区别是这个是从右向左操作的

7. Array. push()

此方法是在数组的后面添加新加元素,此方法改变了数组的长度:

let arr = [1, 2, 3, 4];

arr.push(5);

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

console.log(arr.length); //5

8. Array. pop()

此方法在数组后面删除最后一个元素,并返回数组,此方法改变了数组的长度:

let arr = [1, 2, 3, 4, 5];

arr.pop();

console.log(arr); //[1, 2, 3, 4]

console.log(arr.length); //4

9. Array. shift()

此方法在数组后面删除第一个元素,并返回数组,此方法改变了数组的长度:

let arr = [1, 2, 3, 4, 5];

arr.shift();

console.log(arr); //[2, 3, 4, 5]

console.log(arr.length); //4

  1. Array.unshift()

此方法是将一个或多个元素添加到数组的开头,并返回新数组的长度:

let arr = [1, 2, 3, 4, 5];

arr.unshift(6, 7);

console.log(arr); //[6, 7, 2, 3, 4, 5]

console.log(arr.length); //7

  1. Array.isArray()

判断一个对象是不是数组,返回的是布尔值:

Array.isArray([1, 2, 3, 4]); // --> true

var obj = {

a: 1,

b: 2

};

Array.isArray(obj); // --> false

Array.isArray(new Array); // --> true

Array.isArray("Array"); // --> false

  1. Array.concat()

此方法是一个可以将多个数组拼接成一个数组:

let arr1 = [1, 2, 3]

arr2 = [4, 5]

let arr = arr1.concat(arr2)

console.log(arr) //[1, 2, 3, 4, 5]

  1. Array.toString()

此方法将数组转化为字符串:

let arr = [1, 2, 3, 4, 5];

let str = arr.toString()

console.log(str) // 1,2,3,4,5

  1. Array.join()

此方法也是将数组转化为字符串:

let arr = [1, 2, 3, 4, 5];

let str1 = arr.toString()

let str2 = arr.toString(',')

let str3 = arr.toString('##')

console.log(str1) // 12345

console.log(str2) // 1,2,3,4,5

console.log(str3) // 1##2##3##4##5

通过例子可以看出和 toString 的区别,可以设置元素之间的间隔~

  1. Array.splice(开始位置, 删除的个数,元素)

万能方法,可以实现增删改:

let arr = [1, 2, 3, 4, 5];

let arr1 = arr.splice(2, 0 'haha')

let arr2 = arr.splice(2, 3)

let arr1 = arr.splice(2, 1 'haha')

console.log(arr1) //[1, 2, 'haha', 3, 4, 5]新增一个元素

console.log(arr2) //[1, 2] 删除三个元素

console.log(arr3) //[1, 2, 'haha', 4, 5] 替换一个元素

59. 字符串常用操作

参考答案:

  • charAt(index): 返回指定索引处的字符串

  • charCodeAt(index): 返回指定索引处的字符的 Unicode 的值

  • concat(str1, str2, … ): 连接多个字符串,返回连接后的字符串的副本

  • fromCharCode(): 将 Unicode 值转换成实际的字符串

  • indexOf(str): 返回 str 在父串中第一次出现的位置,若没有则返回-1

  • lastIndexOf(str): 返回 str 在父串中最后一次出现的位置,若没有则返回-1

  • match(regex): 搜索字符串,并返回正则表达式的所有匹配

  • replace(str1, str2):str1 也可以为正则表达式,用 str2 替换 str1

  • search(regex): 基于正则表达式搜索字符串,并返回第一个匹配的位置

  • slice(start, end):返回字符索引在 start 和 end(不含)之间的子串

  • split(sep,limit):将字符串分割为字符数组,limit 为从头开始执行分割的最大数量

  • substr(start,length):从字符索引 start 的位置开始,返回长度为 length 的子串

  • substring(from, to):返回字符索引在 from 和 to(不含)之间的子串

  • toLowerCase():将字符串转换为小写

算法

  1. 冒泡排序

  2. 选择排序

  3. 快速排序

  4. 二叉树查找: 最大值、最小值、固定值

  5. 二叉树遍历

  6. 二叉树的最大深度

  7. 给予链表中的任一节点,把它删除掉

  8. 链表倒叙

  9. 如何判断一个单链表有环

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】