js++知识点记录3

73 阅读1分钟

数组扁平化、去重和排序

1 扁平化--> 一维数组、多维数组

[1,2,3] 一维数组

[[1,2,3], [2,3]] 多维数组

注意点:数组和对象的各种使用和api方法 要非常的熟悉

  function flatten(arr){
  //判断传进来的值是不是数组
    let _arr = arr || [],
       fArr = [],
       len = _arr.length,
       item;
   for(let i=0; i<len; i++){
     item = _arr[i];
     if(_isArray(item)){
       fArr = fArr.concat(flatten(item))
     }else{
       fArr.push(item)
     }
   }
   return fArr;
   function _isArray(item){
     return {}.toString.call(item) === '[object Array]'
   }
        
  }

通过构造函数来 设置array中添加方法

Array.prototype.flatten = function(){
  let _arr = this,
      toString = {}.toString;
      
  if(toString.call(_arr) !== '[object Array]'){
    // 抛出错误
    throw new Error('只有数组才能调用flatten方法');
  }
  let fArr = [];
  
  // 通过forEach 
  _arr.forEach(function(item){
    toString.call(item) === '[object Array]' ? fArr = fArr.concat(item.flatten()) : fArr.push(item)
  })
  return fArr;
  
  // 方法2 通过reduce
  
  return _arr.reduce(function(prev, item){
   return prev.concat(
     toString.call(item) === '[object Array]'
                            ? item.flatten()
                            : item)
  }, [])
}
console.log([[1,2,4,[1,2,[1]]]].flatten())
[1, 2, 4, 1, 2, 1]

// es6的写法

let flatten = (arr) => {
  return arr.reduce((prev, item) => {
    return prev.concat(
     {}.toString.call(item) === '[object Array]'
                              ? flatten(item)
                              : item
    )
  }, [])
}
console.log(flatten([[1,2,4,[1,2,[1,[9,[80,[0]]]]]]]))

方法4

Array.from(new Set([[1,2,4,[1,2,[1,[9,[80,[0]]]]]]].flat(Infinity)))

图片.png

图片.png

图片.png

2 数组元素去重

3 数组元素升序