js基础学习笔记

77 阅读1分钟
  1. 数组扁平化 : 多维(嵌套)数组 转换为 一个数组

    • 使用flat()
    • 利用正则
    • 使用reduce
    • 函数递归
  2. 数组去重

    • 利用Set
    const res1 = Array.from(new Set(arr));
    
    • 两层for循环 + splice
      const unique1 = arr => {
     let len = arr.length;
     for (let i = 0; i < len; i++) {
       for (let j = i + 1; j < len; j++) {
     if (arr[i] === arr[j]) {
       arr.splice(j, 1);
                   // 每删除一个树,j--保证j的值经过自加后不变。同时,len--,减少循环次数提升性能
       len--;
       j--;
     }
    }
     }
     return arr;
    }
    
    • 利用indexOf
    const unique2 = arr => {
      const res = [];
      for (let i = 0; i < arr.length; i++) {
        if (res.indexOf(arr[i]) === -1) res.push(arr[i]);//当该值不存在时push至res;-1为不存在;>0即为下标
      }
      return res;
    }
    
    let arr = [1, 0, false];
    
    console.log( arr.indexOf(1) ); // 0
    console.log( arr.indexOf(0) ); // 1
    console.log( arr.indexOf(false) ); // 2
    console.log( arr.indexOf(null) ); // -1
    
    
    
    
    • 利用include(包含)
    const unique3 = arr => {
      const res = [];
      for (let i = 0; i < arr.length; i++) {
        if (!res.includes(arr[i])) res.push(arr[i]);//如果该值未重复则push入res
      }
      return res;
    }
    
        let arr = [1, 0, false];
        console.log( arr.includes(1) ); // true 如果该值存在则为true
    
    • 利用filter (过滤)
    const unique4 = arr => {
      return arr.filter((item, index) => {
        return arr.indexOf(item) === index;//arr.indexOf(item) 如果出现重复值只返回第一个值得下标;最终返回于index严格相等则是无重复的值、不相等则为已重复的值
      });
    }
    
    
    • 利用Map : 类似于对象{[key : value]}
    map.size // 对象数据的长度
    map.has('key') // 如果key存在则返回true
    map.get('key') // 返回该key对于的value
    
    const map = new Map([ ['name','张三'], ['title','author'] ]); console.log(map); // Map(2) {"name" => "张三", "title" => "author"} console.log(map.size); // 2 console.log(map.has('name')); // true console.log(map.get('name')); // '张三' console.log(map.has('title')); // true console.log(map.get('title')); // 'author'
    
    
        const unique5 = arr => {
          const map = new Map();
          const res = [];
          for (let i = 0; i < arr.length; i++) {
            if (!map.has(arr[i])) {
              map.set(arr[i], true)
              res.push(arr[i]);
            }
          }
          return res;
        }