面试过程中常见的一些关于数组的面试,方法很多,但是总是很多人总是用很老的方法来回复给面试官,这样怎么能加分呢,面试官很大部分并不是想你的解答过程,而是思考问题的方式。那今天就该面试中所遇到的关于数组的问题通过视频的方式呈现出来。
视频地址

  1. 数组排序去重
    1
    形式: [ 1, 2, 3, 4, 5, 3, 4 ] => [ 1, 2, 3, 4, 5 ]

方法一:

  • Set的使用
    1
    [...new Set([1, 2, 3, 4, 5, 3, 4].sort())];

方法二:

  • reduce的使用
    1
    Array.reduce((previousValue, currentValue, currentIndex, array) => { }, initalValue);
1
2
3
4
5
6
7
8
9
10
function uniq(arr) {
return arr.sort().reduce((preVal, current) => {
if (preVal.length === 0 || preVal[preVal.length - 1] !== current) {
preVal.push(current);
}
return preVal;
}, []);
}

uniq([1, 2, 3, 4, 5, 3, 4]);
  1. 数组累加计算
    1
    形式: [1, 2, 3, 4, 5, 6] => 21
1
2
3
4
5
function sum(...param) {
return param.reduce((acc, current) => acc + current, 0);
}

sum(1, 2, 3, 4, 5, 6)
  1. 二维数组转一维数组
    1
    形式: [[1, 2], [3,  4], 5] => [1, 2, 3, 4, 5]
1
2
3
4
5
function invert1(arr) {
return arr.reduce((acc, current) => acc.concat(current), []);
}

invert1([[1, 2], [3, 4], 5])
1
2
3
4
5
function invert2(arr) {
return arr.join().split(',').map(i => +i);
}

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

let invert3 = JSON.parse(`[${arr}]`)

参考:lodash的flattenDeep方法

  1. 寻找两个无序数组相同元素
1
2
3
4
5
6
7
8
9
10
11
12
let a = [2, 3, 4, 5], b = [3, 5, 7, 9];

function findArr(...arr) {
return arr[0].reduce((acc, current) => {
if (arr[1].includes(current)) {
acc.push(current);
}
return acc;
}, []);
}

findArr(a, b);
  1. 查找元素中的交集

形式类似于题目4