天天看点

数组的基本常识总汇

数组构造器

Array构造器用来创建一个新的数组,语法:

  1. new Array(arg1,arg2,arg2,…);
  2. new Array(len)

ES6新增两个构造方法:

  1. Array.of(),将参数依次转化为数组中的一项,最后返回该数组。
console.log(Array.of("90")); // [ '90' ]
console.log(Array.of(9.00));//[ 9 ]      
  1. Array.from(),从一个类数组中的可迭代对象中创建一个数组实例。
const obj = {0:"a",1:"b",2:"c",length:3}
const arr1= Array.from(obj,(value)=>{
    return value.repeat(3)
},obj)
console.log(arr1);//[ 'aaa', 'bbb', 'ccc' ]      

改变数组本身的方法

pop、push、reverse、shift、sort、splice、unshift、copyWithin和fill

未改变数组本身的方法

concat、join、slice、toString、toLocaleString、indexOf、lastIndexOf、includes

遍历数组的方法

forEach、every、some、filter、map、reduce、reduceRight、entries、find、findIndex、keys、values

类数组

arguments对象,只定义在函数体内,它包含了函数的参数和其他属性

function func(name,age,height){
  console.log(arguments);//[Arguments] { '0': 'duxin', '1': 18, '2': 168 }
  console.log(typeof arguments); //object
  console.log(Object.prototype.toString.call(arguments));//[object Arguments]
}

func("duxin",18,168)      

类数组转化数组

  1. 根据扩展运算符来转化类数组
  2. 使用Array.from()来转化类数组
function func(name, age, height) {
    console.log(arguments);//[Arguments] { '0': 'duxin', '1': 18, '2': 168 }
    const arr =[...arguments]
    console.log(arr); // [ 'duxin', 18, 168 ]
    const arr1 = Array.from(arguments);
    console.log(arr1);//[ 'duxin', 18, 168 ]
}

func("duxin", 18, 168)      

数组扁平化

  1. 递归
const arr3 = [1,2,[43,5,6,[100,102,104]]];

function  flatten(arr){
    let result =[];
    for (let index = 0; index < arr.length; index++) {
        if(Array.isArray(arr[index])){
            console.log(arr[index])
            result = result.concat(flatten(arr[index]));
        } else{
            result.push(arr[index])
        }       
    }
    return  result;
}

console.log(flatten(arr3));//[ 1,   2,  43,5,6, 100, 102, 104 ]      
  1. reduce
function flatten(arr){
    return arr.reduce(function(prev,next){
        return prev.concat(Array.isArray(next)?flatten(next):next)
    },[])
}

console.log(flatten(arr3));//[ 1,   2,  43,5,6, 100, 102, 104 ]      
  1. 扩展运算符
function flatten(arr){
   while(arr.some((item)=>Array.isArray(item))){
       arr = [].concat(...arr)
   }

   return arr
}
console.log(flatten(arr3));//[ 1,   2,  43,5,6, 100, 102, 104 ]      
  1. split和toString
function flatten(arr){
   return  arr.toString().split(",");
 }
console.log(flatten(arr3));//[ 1,   2,  43,5,6, 100, 102, 104 ]      
  1. ES6的flat

    语法:flat(depth),depth是数组展开的深度,也就在我们需要展开多少层的意思。

function flatten(arr) {
    return arr.flat(Infinity)
}
console.log(flatten(arr3));//[ 1,   2,  43,5,6, 100, 102, 104 ]      
  1. 正则和JSON
function flatten(arr) {
    let str = JSON.stringify(arr);
    str = str.replace(/(\[|\])/g,'');
    str = '['+str+']';
    return JSON.parse(str)
}
console.log(flatten(arr3));//[ 1,   2,  43,5,6, 100, 102, 104 ]