javascript四种数组(javascript数组includes、reduce的基本使用)
javascript四种数组
javascript数组includes、reduce的基本使用目录
- 前言
- Array.prototype.includes
- 语法
- 参数
- 返回值
- 实例
- Array.prototype.reduce
- 语法
- 参数
- 返回值
- 总结
在过去的几年中,JavaScript语言进行了多次更新。为了跟上技术更新的脚步,时刻保持一颗学习的心。趁着休息的时间学习熟悉一下数组的includes、reduce的使用。
Array.prototype.includesES7添加对此方法的支持,includes() 方法用来判断一个数组是否包含一个指定的值的元素,并返回布尔值true或false,如果包含则返回 true,否则返回 false。
语法
arr.includes(valueToFind[, fromIndex])
参数
- valueToFind(必须):需要查找的元素值,比较字符串和字符时是区分大小写。
- fromIndex(可选):从数组 fromIndex 索引处开始查找 valueToFind。
- 负数 ,则按升序从 array.length + fromIndex 的索引开始搜 (即使从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻)。
- 默认值为 0。
返回值
包含则返回 true,否则返回 false。
实例
// ES5 Code const numbers = ["一", "二", "三", "四"]; console.log(numbers.indexOf("一") > -1); // true console.log(numbers.indexOf("六") > -1); // false // ES7 Code console.log(numbers.includes("一")); // true console.log(numbers.includes("六")); // false console.log(numbers.includes("一",1)); // false,从数组索引为`1`往后找 console.log(numbers.includes("一", -3)); // true,从 `array.length + fromIndex` 的索引开始完后找,跟上面从索引为1开始等效
使用 includes 方法可以使代码简短易懂。include 方法在比较值时也很方便,如下代码。
// 过去 const day = "星期二"; if (day === "星期二" || day === "星期三" || day === "星期四") { console.log(day); } // 现在 if (["星期二", "星期三", "星期四"].includes(day)) { console.log(day); }
reduce() 方法对数组中的每个元素执行reducer函数(升序执行),将其结果汇总为单个返回值。
语法
Array.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素。
参数
- callback(必须):执行数组中每个值 (如果没有提供 initialValue则第一个值除外)的reducer函数,包含四个参数
- accumulator(必须):累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,初始值可以通过initialValue定义,默认为数组的第一个元素值,累加器将保留上一个操作的值,就像静态变量一样
- currentValue(必须):数组中正在处理的元素
- index(可选):数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为 0,否则从索引 1 起始。
注意:如果没有提供 initialValue,reduce 会从索引 1 的地方开始执行 callback 方法,跳过第一个索引。如果提供 initialValue,从索引 0 开始。 - array(可选):调用 reduce() 的数组
- initialValue(可选):作为第一次调用 callback 函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
返回值
函数累计处理的结果。
实例
const arrNumbers = [1, 2, 3, 4, 5]; const reduceNumbers = (arrayNumbers, accumulatorInitVal = false) => { const reduceCallback = (accumulator, currentVal, currentIndex) => { console.log(`当前索引:${currentIndex}`); return accumulator + currentVal; }; return accumulatorInitVal ? arrayNumbers.reduce(reduceCallback, accumulatorInitVal) : arrayNumbers.reduce(reduceCallback); }; console.log(reduceNumbers(arrNumbers)); // 15,累计器初始值为数组的第一个元素的值1 console.log(reduceNumbers(arrNumbers, 10)); // 25,累计器初始值为10
console.log(当前索引:${currentIndex}),是为了更加直观的看到索引值。
第一次未定义初始值输出如下:
当前索引:1
当前索引:2
当前索引:3
当前索引:4
第二次定义了累计器初始值输出如下:
当前索引:0
当前索引:1
当前索引:2
当前索引:3
当前索引:4
接下来我们来看一个奇葩需求,出于某种原因,需要一个包含所有用户全名的新数组(他们的姓,加上他们的名字),但只有当他们是20多岁,并且他们的全名是3个字的时候才需要。不要问我们为什么需要这么奇葩的数据子集,产品经理问了,我们很乐意帮忙^_^
const users = [ { firstName: "坚", lastName: "孙", age: 37, }, { firstName: "策", lastName: "孙", age: 21, }, { firstName: "葛亮", lastName: "诸", age: 28, }, { firstName: "备", lastName: "刘", age: 44, }, { firstName: "统", lastName: "庞", age: 22, }, { firstName: "维", lastName: "姜", age: 19, }, { firstName: "伯温", lastName: "刘", age: 22, }, ]; const getFullName = (user) => `${user.lastName}${user.firstName}`; const filterByAge = (user) => user.age >= 20 && user.age < 30; // 常规实现 const getFilterResult = users // 第一步筛选年龄20-30之间的用户 .filter((user) => filterByAge(user)) // 拼接全名 .map((user) => getFullName(user)) // 筛选 .filter((fullName) => fullName.length === 3); console.log(getFilterResult); // [ '诸葛亮', '刘伯温' ] // 迭代方式实现 const iterationsFilterResult = (arrayResult, currentUser) => { const fullname = getFullName(currentUser); if (filterByAge(currentUser) && fullname.length === 3) { arrayResult.push(fullname); } return arrayResult; }; console.log(users.reduce(iterationsFilterResult, [])); // [ '诸葛亮', '刘伯温' ]
到此这篇关于javascript数组includes、reduce基本使用的文章就介绍到这了,更多相关javascript数组includes、reduce内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- javascript中求二维数组最小值(javascript实现数组最大值和最小值的6种方法)
- javascript 数组排序
- sqlserver判断null(SQL Server索引超出了数组界限的解决方案)
- js array的所有方法(js 数组 find,some,filter,reduce区别详解)
- python数组矩阵操作(Python矩阵和Numpy数组的那些事儿)
- php数组是怎么实现的(PHP里的$_GET数组介绍)
- python 获取数组任意组合(Python实现求两个数组交集的方法示例)
- js数组去重的十种方法(JavaScript常用数组去重实战源码)
- es6常用的数组方法(ES6中Set与WeakSet集合的深入讲解)
- Array.ConvertAll数组间转换
- php数组写法(php文件操作之文件写入字符串、数组的方法分析)
- php获取数组中和为指定数的数组(php统计数组不同元素的个数的实例方法)
- php中怎么分割数组(PHP实现数组根据某个字段进行水平合并,横向合并案例分析)
- python找出数组的最大值(Python查找数组中数值和下标相等的元素示例二分查找)
- pythonnumpy定义一个2*2数组(对python numpy.array插入一行或一列的方法详解)
- python动态数组原理(Python实现的旋转数组功能算法示例)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
热门推荐
- knn算法详细步骤(Python实现KNNK-近邻算法的示例代码)
- asp.net网站如何优化
- kubernetes 虚拟机安装(VirtualBox+Ubuntu16搭建Kubernetes集群的实现)
- 使用npoi将数据导出到一个EXCEL的多SHEET
- sql server2008无法连接怎么办(SQL Server 2008 R2登录失败的解决方法)
- C#获取上个月第一天和最后一天
- thinkphp快速入门手册(从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解)
- python正则表达式入门(Python正则表达式实现简易计算器功能示例)
- sqlserver仲裁状态(使用 SQL 服务器时,"评估期已过期"错误消息解决方法)
- APP运营该注重的细节
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9