cometang前端技术博客 cometang前端技术博客
首页
  • html5
  • JavaScript
  • ES6
  • Vue
  • 微信小程序
  • react
  • react上手教程
  • 前端框架
  • 大神之路
  • 面试汇总
  • Node
  • PHP
  • Go语言
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

cometang

永远相信技术的力量
首页
  • html5
  • JavaScript
  • ES6
  • Vue
  • 微信小程序
  • react
  • react上手教程
  • 前端框架
  • 大神之路
  • 面试汇总
  • Node
  • PHP
  • Go语言
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • ES6

    • let与const
    • 解构赋值
    • 字符串模板
    • 箭头函数
    • 展开运算符
    • 数组的方法
      • ES5 的数组常用方法
      • ES6 新的数组方法
      • ES7 新的数组方法
      • reduce() 使用
      • reduce() 原理实现
      • forEach()使用
      • forEach() 原理实现
      • map() 使用
      • map() 原理实现
      • filter() 使用
      • filter() 原理实现
      • find() 使用
      • find() 实现原理
      • some()使用
      • some() 实现原理
      • every() 使用
      • every() 原理实现
      • includes() 使用
      • from()使用
    • 对象的方法
    • 类的继承
  • vue

  • h5

  • JavaScript

  • 前端框架

  • react

  • 大神之路

  • 微信小程序

  • 面试题汇总

  • react轻松上手教程

  • 前端
  • ES6
cometang
2021-01-20
目录

数组的方法

# ES5 的数组常用方法

  • map
  • some
  • every
  • filter
  • forEach

# ES6 新的数组方法

  • find
  • findIndex
  • reduce (收敛 叠加)
  • for of

# ES7 新的数组方法

  • includes 包含

# reduce() 使用

  • 求数组中的数据之和
/**
 * @reduce 收敛|叠加
 * @prev 当前数据
 * @next 下一个数据
 * @currentIndex 当前执行的下标位置
 * @array 整个数组
 */
let res = [1, 2, 3, 4, 5].reduce((prev, next, currentIndex, array) => {
  return prev + next;
});
console.log(res);
// 15
1
2
3
4
5
6
7
8
9
10
11
12
  • 求数组中的所有数据的平均数
/**
 * @reduce 收敛|叠加
 * @prev 当前数据
 * @next 下一个数据
 * @currentIndex 当前执行的下标位置
 * @array 整个数组
 */
let res = [1, 2, 3, 4, 5].reduce((prev, next, currentIndex, array) => {
  console.log(prev, next, currentIndex, array);
  if (array.length - 1 == currentIndex) {
    return (prev + next) / array.length;
  }
  return prev + next;
});
console.log(res);
// 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • 求对象数组的中某个属性值的和
let total = [{ price: 1000 }, { price: 2000 }, { price: 3000 }].reduce(
  (prev, next, currentIndex, array) => {
    return prev + next.price; //prev 代表每次求和完成之后的数值  next.price 取出下一个元素的price属性的值
  },
  0
); //加一个0 每次取值为数字并且给prev赋值一个默认值为0
console.log(total);
//6000
1
2
3
4
5
6
7
8
  • 多维数组展平
let res = [
  [2, 3, 6, 48, 6],
  [666, 444, 8788, 4554, 65],
].reduce((prev, next, currentIndex, array) => {
  return [...prev, ...next];
});
console.log(res);
//[ 2, 3, 6, 48, 6, 666, 444, 8788, 4554, 65 ]
1
2
3
4
5
6
7
8

# reduce() 原理实现

Array.prototype.myReduce = function(fn, prev) {
  //this 代表的是正在进行处理的数组 [1,2,3,4,5]
  for (let i = 0; i < this.length; i++) {
    if (typeof prev === "undefined") {
      //如果初始状态没有prev 就先拿到数组的第一个与第二个元素进行计算
      prev = fn(this[i], this[i + 1], i + 1, this);
      //第一个元素与第二个元素计算完成之后 再将位置后移一位(因为i==0 现在第1个与第2个已经进行了运算,需要跳过第二个)
      ++i;
    } else {
      //如果第一次计算时没有prev,i的值应该为 2(数组的下标位置为2)
      //如果第一次计算有prev,i的值为0,prev直接传到回调方法中进行运算,完成后更新prev的值
      prev = fn(prev, this[i], i, this);
    }
  }
  //所有的计算完成后将最终值返回给myReduce方法
  return prev;
};
let res = [1, 2, 3, 4, 5].myReduce((prev, next, currentIndex, array) => {
  return prev + next;
});
console.log(res);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# forEach()使用

let arr = [1, 2, 3, 4];
arr.forEach(item, (index) => {
  console.log(item);
});
1
2
3
4

# forEach() 原理实现

let arr = [1, 2, 3, 4];
Array.prototype.myForEach = function(fn) {
  for (let i = 0; i < this.length; i++) {
    fn(this[i], i);
  }
};
arr.myForEach((item, index) => {
  console.log(item, index);
});
1
2
3
4
5
6
7
8
9

# map() 使用

let arr = [1, 2, 3, 4];
// 有返回值 返回值为一个新的数组
let arr1 = arr.map((item, index) => {
  return item * 2;
});
console.log(arr1);
1
2
3
4
5
6

# map() 原理实现

let arr = [1, 2, 3, 4];
Array.prototype.myMap = function(fn) {
  let array = [];
  for (let i = 0; i < this.length; i++) {
    array[i] = fn(this[i], i);
  }
  return array;
};
let arr1 = arr.myMap((item, index) => {
  return item * 2;
});
console.log(arr1);
1
2
3
4
5
6
7
8
9
10
11
12

# filter() 使用

let arr = [1, 2, 3, 4];
// 有返回值,返回值为一个新的数组  条件为true时留下 条件为false时过滤
let arr1 = arr.filter((item, index) => {
  return item > 2;
});
console.log(arr1);
// [3,4]
1
2
3
4
5
6
7

# filter() 原理实现

let arr = [1, 2, 3, 4];
Array.prototype.myFilter = function(fn) {
  let array = [];
  for (let i = 0; i < this.length; i++) {
    if (fn(this[i], i)) {
      array.push(this[i]);
    }
  }
  return array;
};
let arr1 = arr.myFilter((item, index) => {
  return item > 2;
});
console.log(arr1);
// [3,4]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# find() 使用

//有返回值,如果找到对应条件的那个元素直接返回那个元素,如果没有找到就返回 undefined,找到一个满足条件的就不会继续查找了
let arr = [1, 2, 3, 4];
let data = arr.find((item, index) => {
  return item === 2;
});
console.log(data);
// 2
1
2
3
4
5
6
7

# find() 实现原理

let arr = [1, 2, 3, 2];
Array.prototype.myFind = function(fn) {
  let data = undefined;
  for (let i = 0; i < this.length; i++) {
    if (fn(this[i], i)) {
      data = this[i];
      break;
    }
  }
  return data;
};
let data = arr.myFind((item, index) => {
  return item === 3;
});
console.log(data);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# some()使用

//有返回值(布尔型 true false),如果找到对应条件的那个元素直接返回true,如果没有找到就返回 false,找到一个满足条件的就不会继续查找了
let arr = [1, 2, 3, 2];
let data = arr.some((item, index) => {
  return item === 3;
});
console.log(data);
// true
1
2
3
4
5
6
7

# some() 实现原理

let arr = [1, 2, 3, 2];
Array.prototype.mySome = function(fn) {
  let data = false;
  for (let i = 0; i < this.length; i++) {
    if (fn(this[i], i)) {
      data = true;
      break;
    }
  }
  return data;
};
let data = arr.mySome((item, index) => {
  return item === 2;
});
console.log(data);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# every() 使用

  • every 的结果刚号和 some 相反,找到一个条件不满足的马上返回一个 false,且不继续往后面找
//有返回值(布尔型 true false),如果找到 不满足条件的那个元素直接返回false,且不继续往后执行,如果一直找不到不满足条件的元素 最终返回true;
let arr = [2, 2, 2, 3]; //  这里数组改为[2,2,2,2]  最后的返回结果为 true
let data = arr.every((item, index) => {
  return item === 2;
});
console.log(data);
// false
1
2
3
4
5
6
7

# every() 原理实现

let arr = [2, 2, 2, 3];
Array.prototype.myEvery = function(fn) {
  let data = true;
  for (let i = 0; i < this.length; i++) {
    if (!fn(this[i], i)) {
      data = false;
      break;
    }
  }
  return data;
};
let data = arr.myEvery((item, index) => {
  return item === 2;
});
console.log(data);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# includes() 使用

// 数组是否包含某个值 是包含的就返回true 没有包含就返回false
let arr = [1,2,3,4]
let res = arr.includes(2);
console.log(res)
1
2
3
4

# from()使用

  • 将类数组转换为数组
  • 常见类数组:htmlCollection (获取Dom节点) arguments[{0:1,1:'xxx'}] 手写定义的类数组: [{0:1,1:2,2:3,length:3}]
function a(){
    console.log(arguments);  //{ '0': 1, '1': 2, '2': 3, '3': 6, '4': 4, '5': 5 }
    console.log(Array.from(arguments));  //[ 1, 2, 3, 6, 4, 5 ]
     console.log(...arguments); //  1 2 3 6 4 5
}
a(1,2,3,6,4,5);
1
2
3
4
5
6
编辑 (opens new window)
上次更新: 2022/05/28, 19:34:46
展开运算符
对象的方法

← 展开运算符 对象的方法→

最近更新
01
go语言基础
07-13
02
《react上手教程》- 基础语法
07-13
03
redux-redux toolkit-状态管理
03-18
更多文章>
Theme by Vdoing | Copyright © 2019-2023

cometang | 唐世杰 渝ICP备18015657号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式