Skip to content

Instantly share code, notes, and snippets.

@KoreSamuel
Last active August 3, 2020 14:17
Show Gist options
  • Save KoreSamuel/12c685d9b3f102c4614de14699ef1d7b to your computer and use it in GitHub Desktop.
Save KoreSamuel/12c685d9b3f102c4614de14699ef1d7b to your computer and use it in GitHub Desktop.
  1. 实现一个函数 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...
}
  1. 实现一个add,满足以下
add(1)(2); // 3
add(1)(2)(3)(4)(5); // 15
add(1, 2, 3)(10); // 16
  1. 实现扁平化数组满足以下
const arr = flatten([1, [2], [3, [[4]]]]);
console.log(arr); // [1, 2, 3, 4]
const flatten = params => {
  // TODO...
}
  1. 实现一个洗牌算法(数组乱序)。每个数字出现在每个位的概率平均
function shuff(arr) {
  // TODO...
}
  1. 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]
})()
  1. 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
})();
  1. 用js实现一个深拷贝,尽量多考虑情况
function deepclone(obj) {
  // TODO...
}
  1. 手写 call、apply 及 bind 函数

  2. 实现一个Promise,常用api

  3. 实现函数,尽可能多的判断数据类型

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}
  1. 实现一个memory(fn)函数,使fn在参数相同时有结果直接返回(考虑key值是关键)

  2. 2.给定任意二维数组,输出所有的顺序排列组合项。比如 [['A','B'], ['a','b'], [1, 2]],输出 ['Aa1','Aa2','Ab1','Ab2','Ba1','Ba2','Bb1','Bb2']

  3. 实现函数 forEach(arr, cb) ,使cb逐个处理arr中的元素,一次处理可能是同步的,也可能是异步的,要求处理完成当前元素才能处理下一个。

  4. 写个方法将error first, callback类型的方法可以使用async 和 await的形式调用

  5. 设计一个算法,从如下矩阵中m点到n点的最短路径,1为障碍物,0可通行

10010010m10
00101010011
11000100110
00110101001
11001001010
11001n10011

m和n的位置不定,但一定在第一行和最后一行
只可向上下左右移动,不可对角线
找到从m到n需要最少走的步数

(我:dfs或bfs都可以,可以比较一下两种算法的优劣)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment