(自用面试题)数组的常用方法有哪些?

99 阅读6分钟
  • 数组搜索方法

    • indexOf()方法
    • lastIndexOf()方法
      这两个方法都接收两个参数:要查找的元素和一个可选的起始搜索位置。indexOf()方法从数组前头(第一项) 开始向后搜索,而lastIndexOf()方法从数组末尾(最后一项)开始向前搜索。这两个方法都返回要查找的元素在数组中的位置,如果没找到则返回-1。

    eg:

    let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
    alert(numbers.indexOf(4));// 3
    alert(numbers.lastIndexOf(4));// 5
    
  • 数组转换为字符串方法

    • toString()方法
    • toLocalString()方法
    • join()方法
      toString()方法、toLocalString()方法都返回数组值的逗号分隔的字符串。而join()方法接受一个参数,即字符串分隔符,返回数组值的字符串分隔符分隔的字符串;如果不传入任何参数或者传入undefined,则仍然使用逗号作为分隔符。
      如果数组中某一项是undefined或者null,则在toString()方法、toLocaleString()方法、join()方法和valueOf()方法返回的结果中会以空字符串表示。

    eg:

    let colors = ["red""green""blue"]; 
    alert(colors.join(","));     // red,green,blue 
    alert(colors.join("||"));    // red||green||blue
    
  • 数组尾部操作方法

    • push()方法
      push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度
    • pop()方法
      pop()方法用于删除数组的最后一项,同时减少数组的length值,返回被删除的项

    eg:

    let colors = new Array();
    let count = colors.push("red", "green");
    alert(count);// 2
    
    count = colors.push("black");
    alert(count);// 3
    
    let item =color.pop();
    alert(item);// black
    alert(colors.length);// 2
    
  • 数组首部操作方法

    • unshift()方法
      unshift()方法接收任意数量的参数,并将它们添加到数组开头,返回数组的最新长度
    • shift()方法
      shift()方法用于删除数组的第一项,同时减少数组的length值,返回被删除的项

    eg:

    let colors = new Array();
    let count = colors.unshift("red", "green");// 从数组开头推入两项
    alert(count);// 2
    
    count = colors.unshift("black");
    alert(count);// 3
       
    let item =color.shift();
    alert(item);// black
    alert(colors.length);// 2
    
  • 数组拼接方法
    concat()方法
    concat()方法可以在现有数组全部元素基础上创建一个新数组:它首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组。如果传入一个或多个数组,则concat()方法会把这些数组的每一项都添加到结果数组;如果参数不是数组,则直接把它们添加到结果数组末尾。这个操作不影响原始数组。

eg:

let colors = ["red""green""blue"]; 
let colors2 = colors.concat("yellow", ["black""brown"]);  
console.log(colors);   // ["red""green","blue"] 
console.log(colors2);  // ["red""green""blue""yellow""black""brown"]
  • 数组截取方法
    slice()方法
    slice()方法用于创建一个包含原有数组中一个或多个元素的新数组。slice()方法可以接收一个或两个参数,即返回元素的开始索引和结束索引:如果只有一个参数,则slice()方法会返回该索引到数组末尾的所有元素;如果有两个参数,则slice()方法返回从开始索引到结束索引对应的所有元素,其中不包含结束索引对应的元素。这个操作不影响原始数组。
    如果slice()方法的参数有负值,那么就以数值长度加上这个负值的结果确定位置。比如,在包含5个元素的数组上调用slice(-2, -1),就相当于调用slice(3, 4)。如果结束位置小于开始位置,则返回空数组。

eg:

let colors = ["red""green""blue""yellow""purple"]
let colors2 = colors.slice(1)
let colors3 = colors.slice(14);  
alert(colors2);  // ["green", "blue", "yellow", "purple"]
alert(colors3);  // ["green", "blue", "yellow"]
  • 数组插入、删除、替换方法
    splice()方法。
    splice()方法主要用于在数组中间插入元素。这个操作影响原数组
    删除:需要给splice()方法传2个参数,即要删除的第一个元素的位置和要删除的元素数量,可以从数组中删除任意多个元素。比如splice(0, 2)会删除前两个元素。
    插入:需要给splice()方法传3个参数,即开始位置、0(要删除的元素数量)和要插入的元素,可以在数组中指定的位置插入元素,第三个参数之后还可以传第四个、第五个参数乃至任意多个要插入的元素。比如splice(2, 0, "red", "green")会从数组位置2开始插入字符串"red"和"green"。
    替换:splice()方法在删除元素的同时可以在指定位置插入新元素,同样要传入3个参数,即开始位置、要删除元素的数量和要插入的任意多个元素,要插入的元素数量不一定跟删除的元素数量一致。比如splice(2, 1, "red", "green")会在位置2删除一个元素,然后从该位置开始向数组中插入"red"和"green"。
    splice()方法始终返回这样一个数组,它包含从数组中被删除的元素(如果没有删除元素,则返回空数组) 。

eg:

let colors = ["red""green""blue"]; 
let removed = colors.splice(0,1);  // 删除第一项 
alert(colors);                     // ["green""blue"]  
alert(removed);                    // ["red"],只有一个元素的数组  

removed = colors.splice(10"yellow""orange");   // 在位置1插入两个元素 
alert(colors);                                       // ["green", "yellow""orange", "blue"] 
alert(removed);                                      // 空数组

removed = colors.splice(11"red""purple");  // 插入两个值,删除一个元素 
alert(colors);                                   // ["green", "red""purple" "orange", "blue"]  
alert(removed);                                  // ["yellow"],只有一个元素的数组
  • 数组排序方法

    • reverse()方法
      reverse()方法就是将数组元素反向排序。
    • sort()方法
      默认情况下,sort()方法会按照升序重新排列数组元素。具体是对数组每一项调用String()转型函数,然后比较字符串来决定顺序。

    eg:

    let values = [12345]
    values.reverse()
    alert(values);  // [5, 4, 3, 2, 1]
    
    let values = [0151015]
    values.sort()
    alert(values);  // [0, 1, 10, 15, 5]
    
  • 数组迭代方法

  • 数组归并方法

    • reduce()方法
    • reduceRight()方法
      这两个方法都会迭代数组的所有项,并在此基础上构建一个最终返回值。reduce()方法从数组第一项开始遍历到最后一项,而reduceRight()方法从最后一项开始遍历至第一项。这两个方法都接收两个参数:对每一项都会运行的归并函数以及可选的以之为归并起点的初始值,传给reduce()方法和reduceRight()方法的函数接收4个参数:上一个归并值、当前项、当前项的索引和数组本身。这个函数返回的任何值都会作为下一次调用同一个函数的第一个参数。如果没有给这两个方法传入可选的第二个参数(作为归并起点值),则第一次迭代将从数组的第二项开始,因此传给归并函数的第一个参数是数组的第一项,第二个参数是数组的第二项

    eg:

    let values = [12345]
    let sum1 = values.reduce((prev, cur, index, array) => prev + cur);  
    alert(sum1);  // 15
    
    let sum2 = values.reduceRight((prev, cur, index, array) => prev + cur);  
    alert(sum2);  // 15