数组的方法

59 阅读3分钟
// pop() 删除最后一位,返回被删除的元素
// push() 往最后位置添加(1个或多个),返回数组的新长度
// shift() 删除数组的第一位,返回被删除的元素
// unshift() 往数组的第一位添加(1个或多个)元素,返回数组的新长度
// sort()  它是默认根据ASCII码,进行排序 (10以上的数字,无法准确的排序)
//      给它一个回调函数(callback), a-b 升序,b-a 降序
// reverse() 倒序
// concat() 合并数组
// slice() 截取,不会改变原来数组
// splice()  删除,插入,替换
// join() 根据指定格式返回字符串,默认是以"逗号"隔开

//能够实现浅拷贝的方法
// slice(),concat()

//for和for..in
//for是根据数组的长度,决定遍历的次数
//for..in,根据数组的成员,来决定次数




//1.forEach,只能做遍历,没有返回值
  //       不能被中断
  //  可以制造异常,结合 try..catch 中断
  var arr = [11, 22, 33, 44, 55];
  try {
    arr.forEach(function (item, index, aaa) {
      console.log(item, index, aaa);
      if (index == 2) {
        throw new Error("制造异常")
      }
    })
  } catch (error) {

  }

  console.log("11111");

  //2.map 能做遍历,返回一个新的数组 
  //    新数组的内容,由回调函数决定
  var arr = [11, 22, 33, 44, 55];
  var res = arr.map(function (item, index, arr) {
    return item * 10
  });

  console.log(res);
  console.log(arr);
  //3.some 只要有1个满足,就返回true
  //  在遍历过程中,条件满足,就中断遍历
  var arr = [11, 22, 33, 44, 55];
  var res = arr.some(function (item) {
    console.log(item);
    return item == 99
  });
  console.log(res);

  //4. ervery 所有的满足条件,才会返回true,默认返回false
  var arr = [11, 22, 33, 44, 55];
  var res = arr.every(function (item) {
    return item > 10
  });
  console.log(res);

  //5.filter过滤 返回新的数组,数组的内容由回调函数的条件决定
  var arr = [11, 22, 33, 44, 55];
  var res = arr.filter(function (item) {
    return item > 30;
  })
  console.log(res);

  //6.find  (ES6)
  // 通过条件,查找某一项,如果存在,就返回这一项
  var arr = [
    { id: 1, name: "刘德华", age: 20 },
    { id: 2, name: "蔡徐坤", age: 21 },
    { id: 3, name: "吴彦祖", age: 23 },
    { id: 4, name: "彭于晏", age: 24 }];

  var res = arr.find(function (item, index) {
    return item.id == 4
  });
  console.log(res);
  //7.findIndex (es6)
  // 返回满足条件某一项的下标
  var arr = [
    { id: 1, name: "刘德华", age: 20 },
    { id: 2, name: "蔡徐坤", age: 21 },
    { id: 3, name: "吴彦祖", age: 23 },
    { id: 4, name: "彭于晏", age: 24 }];

  var index = arr.findIndex(function (item) {
    return item.id == 3
  })
  console.log(index);
  //8.indexOf
  // 找到了返回下标,找不到返回-1
  // 它有2个参数,第2个参数默认是从0开始,也可以指定开始位置
  var arr = [11, 22, 33, 44, 55];
  console.log(arr.indexOf(22, 2)); //22的下标是1

  //9.lastIndexOf
  var arr = [11, 22, 33, 44, 55, 22, 88, 22, 77];
  console.log(arr.lastIndexOf(22, 3));//用得少

  //10.includes
  var arr = [11, 22, 33, 44, 55, 22, 88, 22, 77];
  console.log(arr.includes(100));


  // find,findIndex,indexOf,lastIndexOf,includes
  //10.reduce
  // typescript

  var arr = [11, 22, 33, 44, 55];
  //现在的reduce只传入了一个参数 回调函数
  //pre是上一次回调函数的返回值,没就是undefined
  // arr.reduce(function (pre, cur, index, arr) {
  //   console.log(pre, cur);
  // })

  // reduce有2个参数,第1个参数是回调函数,第2参数给pre的初始值
  var arr = [11, 22, 34, 44, 55];
  // arr.reduce(function (pre, cur) {
  //   console.log(pre, cur);
  //   return 1
  // }, 100)

  // arr.reduce(function (pre, cur) {
  //   console.log(pre, cur);
  //   return 1
  // })

  var res = arr.reduce(function (pre, cur) {
    // pre 11 cur 22  -->33
    // pre 33 cur 34  -->67
    // pre 67 cur 44  -->111
    // pre 111 cur 55 --> 166
    return pre + cur;  //这个return决定了下一轮循环pre的值
  });
  console.log(res); //166