天天看點

數組的基本常識總彙

數組構造器

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 ]