数组方法

113 阅读4分钟
  1. arr.concat(): 数组一级拆散拼接合并;

     参数:可以是多个;
     返回值:返回被连接数组的一个副本。
     是否修改原数组:N;
     特殊:
         1.可对数组进行浅拷贝;
    
var arr = ['a','b','c', ['d']];
var arr1 = arr.concat();
//修改
arr[0] = 'e' // 不会影响到arr1
arr[3][0] = 'd1' // 会同步修改影响到arr1
  1. arr.join(): 数组按照参数分割成字符串,多维数组也可以用;

     参数:任意字符串,默认为',';
     是否修改原数组:N;
    
  2. pop() / push() / shift() / unshift();

     pop(): 数组尾部删除内容,并返回被删除的数组元素;
     push(): 向数组尾部推入内容,并返回新数组的lengthshift(): 数组头部删除元素,并返回被删除的元素;
     unshift(): 在数组头部压入元素,并返回新数组的length;
     是否改变原数组:Y;
    
  3. arr.reverse(): 返回颠倒的原数组;

     是否改变原数组:Y;
    
  4. arr.slice(start, end): 截取数组元素;

     参数:
         1.start必选,可以为负数;
         2.end非必选。
     是否改变原数组:N;
    
  5. arr.sort(): 排序,默认为升序;

     参数: 
         1.无,默认升序;
         2.callback(a, b);
     是否改变原数组:Y;
     特殊:
     1.默认排序按照字符串顺序排序;
     2.回调参数:
         a: 后一位元素;
         b: 当前元素;(上一个元素);
    
        排序:
        var arr = [2,30,50,25,666];
            console.log(arr.sort(fn));  // [2, 25, 30, 50, 666]
            console.log(arr);           // [2, 25, 30, 50, 666] ---原数组改变
            function fn(a,b){  // 第一次 a -> 2; b -> 30;
                return a-b;
            }
        }
  1. arr.splice(start,num,data1,data2,...): 在数组指定位置添加/删除/替换数组;

     参数:
         1.start: 开始下标位置,只传该参数时,默认情况数组;
         2.num: 删除的元素个数;(注意不是下标位置,仅表示元素数量)
         3.后续参数:为在指定下表位置替换被删除的内容,枚举类型;
     是否改变原数组:Y;
    
  2. arr.toString(): 转换成字符串,类似join();

     是否改变原数组:N;
    
  3. arr.indexOf(value, start): 查找参数value在数组中下标,不存在返回-1;

  4. arr.lastIndexOf(value, start): 从右至左查找参数value在数组中下标,不存在返回-1;

  5. arr.forEach((value,index,self) => {}): 遍历数组,无返回值;

  6. arr.map((value,index,self) => {}): 遍历数组,并将所有回调函数的返回值组成新数组返回。

var arr = ["Tom","Jack","Lucy","Lily","May"];
    var a = arr.map(function(value,index,self){
        return "hi:"+value;
    })
    console.log(a);     //["hi:Tom", "hi:Jack", "hi:Lucy", "hi:Lily", "hi:May"]
    console.log(arr);   //["Tom", "Jack", "Lucy", "Lily", "May"]---原数组未改变
  1. arr.filter((value,index,self) => {}): 过滤(收集),将符合条件的元素组成新数组返回;

    是否改变原数组:N;
    
var a = [1,2,3,4,5,3,4,3,33];
var result = a.filter( 
  item =>{
    return item === 3 // 会检查所有元素
  }
)
console.log(result) // [3, 3, 3]
  1. arr.find((value,index,self) => {}): 查找,找到第一个之后就停止,返回找到的值,不会遍历所有; 是否改变原数组:N;

  2. every() / some(); every((value,index,self) => {}): 1.判断数组每项是否符合条件,符合返回true,否则false; 2.在第一个false的位置停止退出遍历; some((value,index,self) => {}): 任意内容符合条件则返回true, 否则返回false;

  3. arr.reduce((prev,now,index,self) => {}, initValue): 遍历累加,并返回累加后的最终值;

    注意:
        1.省略initValue, 第一次prev为第一个元素,now为第二个元素;
        2.回调函数未return内容,第二次之后的prev值为undefined;
    
  4. arr.reduceRight((prev,now,index,self) => {}, initValue): 同reduce,遍历从右往左;

  5. arr.includes(a): 查询数组内容是否包含指定内容,返回布尔值,字符串/数组均可用;

  6. arr.indexOf(a): 查询数组内容是否包含指定内容,返回下标,找不到返回-1,字符串/数组均可用;

  7. arr.findIndex(item => item.id === 2): 查找对象数组的下标;

  8. arr.flat()扁平化数组

    var newArray = arr.flat([depth]);
    -`arr`:调用 `flat()` 方法的数组。
    -`depth`:
        可选参数,指定要扁平化的深度,默认值为 `1`,表示只扁平化一层嵌套数组;
        若传入 `Infinity`,则会将数组完全扁平化,无论嵌套多少层。
    -`newArray`:扁平化后的新数组,原数组不会被修改。
    应用场景:
    const sparseArray = [1, , [2, 3]]; 
    const flattenedSparseArray = sparseArray.flat(); 
    console.log(flattenedSparseArray); // 输出: [1, 2, 3]
    `flat()` 方法还会移除数组中的空槽,将稀疏数组转换为连续的数组

23.arr.flatMap(): 结合了 map() 和 flat() 的功能, 先map()再执行flat()

    ```
    const orders = [
        [{ name: 'apple', price: 1 }, { name: 'banana', price: 2 }],
        [{ name: 'cherry', price: 3 }]
    ];
    const allItems = orders.flatMap(order => {
        return order.map(item => ({
           ...item,
            inStock: true
        }));
    });
    console.log(allItems); 
    // 输出: [
    //   { name: 'apple', price: 1, inStock: true },
    //   { name: 'banana', price: 2, inStock: true },
    //   { name: 'cherry', price: 3, inStock: true }
    // ]
    ```

24.arr.fill(): 填充数组,会修改原数组

    arr.fill(value[, start[, end]])
    -   `value`:必需,用来填充数组元素的值。
    -   `start`:可选,起始索引,默认值为 0。
    -   `end`:可选,终止索引,默认值为数组的长度。注意,填充操作不包含该索引位置的元素。
    -   该方法会修改原数组,并返回修改后的数组
    
    const letters = ['a', 'b', 'c', 'd', 'e']; 
    letters.fill('x', 1, 3); 
    console.log(letters); // 输出: ['a', 'x', 'x', 'd', 'e']