- 实现一个函数 find(obj, str),满足以下
const obj = { a: { b: { c: 1 } } };
find(obj, 'a.b.c') //1
find(obj, 'a.d.c') //undefined
const find = obj => {
// TODO...
}
- 实现一个add,满足以下
add(1)(2); // 3
add(1)(2)(3)(4)(5); // 15
add(1, 2, 3)(10); // 16
- 实现扁平化数组满足以下
const arr = flatten([1, [2], [3, [[4]]]]);
console.log(arr); // [1, 2, 3, 4]
const flatten = params => {
// TODO...
}
- 实现一个洗牌算法(数组乱序)。每个数字出现在每个位的概率平均
function shuff(arr) {
// TODO...
}
- arr 是有序数组,通过二分查找 arr 中与 val 相等的值的位置
function find(arr, val) {
// TODO...
}
// test cases
(function test() {
const arr = [1, 2, 3, 5];
const vals = [0, 1, 1.2, 1.8, 3, 3.5, 5, 5.1];
console.log(vals.map(val => find(arr, val)));
// [false, 0, false, false, 2, false, 3, false]
})()
- arr 是有序数组,实现通过二分查找 arr 中与 val 最接近的值的位置
function find2(arr, val) {
// TODO...
}
// test cases
(function test() {
const arr = [1, 2, 3, 5];
const vals = [0, 1, 1.2, 1.8, 3, 3.5, 5, 5.1];
console.log(vals.map(val => find2(arr, val)));
// [0, 0, 0, 1, 2, 2, 3, 3
})();
- 用js实现一个深拷贝,尽量多考虑情况
function deepclone(obj) {
// TODO...
}
-
手写 call、apply 及 bind 函数
-
实现一个Promise,常用api
-
实现函数,尽可能多的判断数据类型
const merge = (...args) => {}
const a = { a: 1, b:2, c: 3}
const b = {a:[4,5], b:’cc’}
merge(a, b);
Output {a: [1,4,5], b: [2, ‘cc], c: 3}
-
实现一个memory(fn)函数,使fn在参数相同时有结果直接返回(考虑key值是关键)
-
2.给定任意二维数组,输出所有的顺序排列组合项。比如 [['A','B'], ['a','b'], [1, 2]],输出 ['Aa1','Aa2','Ab1','Ab2','Ba1','Ba2','Bb1','Bb2']
-
实现函数 forEach(arr, cb) ,使cb逐个处理arr中的元素,一次处理可能是同步的,也可能是异步的,要求处理完成当前元素才能处理下一个。
-
写个方法将error first, callback类型的方法可以使用async 和 await的形式调用
-
设计一个算法,从如下矩阵中m点到n点的最短路径,1为障碍物,0可通行
10010010m10
00101010011
11000100110
00110101001
11001001010
11001n10011
m和n的位置不定,但一定在第一行和最后一行
只可向上下左右移动,不可对角线
找到从m到n需要最少走的步数
(我:dfs或bfs都可以,可以比较一下两种算法的优劣)