JS面试题:JS数组中自带的方法

226 阅读4分钟

1. toString()

toString()把数组变成字符串

 const arr = [1,2,3,4,5]
 console.log(arr.toString())
 // 输出结果:1,2,3,4,5

2. join()

把数组变成字符串,用逗号隔开,join中可添加任意你想隔开的字符

 const arr = [1,2,3,4,5]
 console.log(arr.join(','))
 // 输出结果:1,2,3,4,5

3. sort()

默认是按照编码顺序排序

 const arr = [1,2,3,4,11]
 console.log(arr.sort())
  // 输出结果:[1, 11, 2, 3, 4]

按数字顺序排序,升序

   let arr = [11,12,1,32, 3, 4];
    console.log(arr.sort((a, b)=>{
        return a - b;
    })); 
    // 输出结果: [1, 3, 4, 11, 12, 32]

按数字顺序排序,降序

   let arr = [11,12,1,32, 3, 4];
    console.log(arr.sort((a, b)=>{
        return b - a;
    })); // [32, 12, 11, 4, 3, 1]

4. reverse()方法

reverse() 方法用于颠倒数组中元素的顺序

该方法会改变原来的数组

let arr = [11,12,1,32, 3, 4];
console.log(arr.reverse()); // [4, 3, 32, 1, 12, 11]
console.log(arr);  // [4, 3, 32, 1, 12, 11]

5. 栈和队列

栈操作:先进后出

    let arr = [];
    arr.push(1);
    arr.push(2);
    console.log(arr); // [1,2]
    console.log(arr.pop()); // 2
    console.log(arr.pop()); // 1

pop()拿到的是数组的最后一个值

队列操作:先进先出

    let arr = [];
    arr.push(1);
    arr.push(2);
    console.log(arr); // [1,2]
    console.log(arr.shift()); // 1
    console.log(arr.shift()); // 2

shift()是拿数组第一个值

unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度

    let arr = [1,2];
    arr.unshift(3,4,5);
    console.log(arr); // [3, 4, 5, 1, 2]

6. concat方法

concat() 方法用于连接两个或多个数组,不改变原数组

 let arr1 = [1,2,3];
 let arr2 = [4,5,6];
 console.log(arr1.concat(arr2)); // [1, 2, 3, 4, 5, 6]
 console.log(arr1); // [1,2,3]
 console.log(arr2); // [4,5,6]

7. slice方法

slice(start, end)截取数组中从start到end的数组,不改变原数组

    let arr = [1,2,3,4,5,5];
    console.log(arr.slice(1,3)); // [2, 3]
    console.log(arr); // [1, 2, 3, 4, 5, 5]

8. splice方法

splice(index,howmany,item1,…,itemX)

index: 规定添加/删除项目的位置,使用负数可从数组结尾处规定位置

howmany: 要删除的项目数量。如果设置为 0,则不会删除项目

item1, …, itemX: 向数组添加的新项目

splice可以用来数组删除和添加,会改变原来的数组

    let arr = [1,2,3,4,5,5];
    console.log(arr.splice(1,3)); // [2, 3, 4]
    console.log(arr); //  [1, 5, 5]

9. indexOf() 和 lastIndexOf()

indexOf:某个元素在数组中首次出现的索引值 lastIndexOf:某个元素在数组中最后一次出现的索引值

    let arr = [1,2,3,4,5,5];
    console.log(arr.indexOf(5)); // 4
    console.log(arr.lastIndexOf(5)); // 5

10. every()方法

检测数组所有元素是否都符合指定条件 every() 不会对空数组进行检测 every() 不会改变原始数组

let arr = [{
    name: '小明',
    id: 1
},{
    name: '小明',
    id: 2
}];

let a = arr.every(it=>{
    return it.name == '小明'
})
console.log(a); // true

let b = arr.every(it=>{
    return it.id == 1
})
console.log(b); // false

11. some()方法

用于检测数组中的元素是否满足指定条件 some() 不会对空数组进行检测 some() 不会改变原始数组

   let arr = [{
        name: '小明',
        id: 1
    },{
        name: '小明',
        id: 2
    }];

    let a = arr.some(it=>{
        return it.name == '小明'
    })
    console.log(a); // true

    let b = arr.some(it=>{
        return it.id == 1
    })
    console.log(b); // true

12. filter过滤

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素 filter() 不会对空数组进行检测 filter() 不会改变原始数组

let arr = [{
         name: '小明',
         id: '1'
     },{
         name: '小花',
         id: '2'
     },{
         name: '小明',
         id: '3'
     }]

    //  过滤出name为小明的那一项
    let newArr = arr.filter(it=>it.name == '小明');
    console.log(newArr);
    // 输出结果 [{name: "小明", id: "1"}, {name: "小明", id: "3"}]
 

13. map用法

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值 map() 方法按照原始数组元素顺序依次处理元素 map() 不会对空数组进行检测 map() 不会改变原始数组

    let arr = ['小明', '小花', '小涛'];
    let newArr = arr.map((it, index)=>{
        return {
            name: it,
            id: index
        }
    });
    console.log(newArr);
    //输出结果:[{name: "小明", id: 0}, {name: "小花", id: 1}, {name: "小涛", id: 2}]

14. reduce用法

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值 reduce() 对于空数组是不会执行回调函数的

arr.reduce(function(prev,cur,index,arr){
...
}, init);

arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1init 表示初始值。
    let arr = [1,2,3,4,5];
    let total = arr.reduce((pre, current, index)=>{
        return pre+current;
    }, 0);
    console.log(total); // 15

15. reduceRight用法

reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加 reduce() 对于空数组是不会执行回调函数的

16. for和forEach

     const arr = [1,2,3,4,5]
      for(let i = 0; i < arr.length;i++){
        console.log(i)
        if(i == 2){
          break
        }
      }
      // 输出结果:0 1 2
     function func() {
        const arr = [1, 2, 3, 4, 5]
        for (let i = 0; i < arr.length; i++) {
          console.log(i)
          if (i == 2) {
            return
          }
        }
      }
      func()
      // 输出结果:0 1 2

forEach不支持break forEach中使用return无效

foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。