深圳某电商公司

1. null和undefined

  • null表示一个"无"的对象,也就是该处不应该有值;而undefined表示未定义。
  • 在转换为数字时结果不同,Number(null)为0,而undefined为NaN。

使用场景上:

null:

  • 作为函数的参数,表示该函数的参数不是对象
  • 作为对象原型链的终点

undefined:

  • 变量被声明了,但没有赋值时,就等于undefined
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined
  • 对象没有赋值属性,该属性的值为undefined
  • 函数没有返回值时,默认返回undefined

2. 冒泡排序算法和数组去重

冒泡排序:

    function bubbleSort (arr) {
      for (let i = 0; i < arr.length; i++) {
        let flag = true;
        for (let j = 0; j < arr.length - i - 1; j++) {
          if (arr[j] > arr[j + 1]) {
            flag = false;
            let temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
          }
        }
        if (flag) break;
      }
      return arr;
    }

这个是优化过后的冒泡排序。用了一个flag来优化,它的意思是:如果某一次循环中没有交换过元素,那么意味着排序已经完成了。

冒泡排序总会执行(N-1)+(N-2)+(N-3)+..+2+1趟,但如果运行到当中某一趟时排序已经完成,或者输入的是一个有序数组,那么后边的比较就都是多余的,为了避免这种情况,我们增加一个flag,判断排序是否在中途就已经完成(也就是判断有无发生元素交换)

数组去重:

  • Array.from(new Set(arr))
  • [...new Set(arr)]
  • for循环嵌套,利用splice去重
  • 新建数组,利用indexOf或者includes去重
  • 先用sort排序,然后用一个指针从第0位开始,配合while循环去重

当然还有很多,例如用filter、reduce、Map、Object等,具体可以看:

Array.from(new Set(arr))或[...new Set(arr)]

    var arr = [1,1,2,5,6,3,5,5,6,8,9,8];
    console.log(Array.from(new Set(arr)))
    // console.log([...new Set(arr)])

for循环嵌套,利用splice去重:

    function unique (origin) {
      let arr = [].concat(origin);
      for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
          if (arr[i] == arr[j]) {
            arr.splice(j, 1);
            j--;
          }
        }
      }
      return arr;
    }
    var arr = [1,1,2,5,6,3,5,5,6,8,9,8];
    console.log(unique(arr))

新建数组,利用includes去重:

    function unique (arr) {
      let res = []
      for (let i = 0; i < arr.length; i++) {
        if (!res.includes(arr[i])) {
          res.push(arr[i])
        }
      }
      return res;
    }
    var arr = [1,1,2,5,6,3,5,5,6,8,9,8];
    console.log(unique(arr))

先用sort排序,然后用一个指针从第0位开始,配合while循环去重:

    function unique (arr) {
      arr = arr.sort(); // 排序之后的数组
      let pointer = 0;
      while (arr[pointer]) {
        if (arr[pointer] != arr[pointer + 1]) { // 若这一项和下一项不相等则指针往下移
          pointer++;
        } else { // 否则删除下一项
          arr.splice(pointer + 1, 1);
        }
      }
      return arr;
    }
    var arr = [1,1,2,5,6,3,5,5,6,8,9,8];
    console.log(unique(arr))
Last Updated:
Contributors: leeguooooo