javascript数组includes、reduce的基本使用


Posted in Javascript onJuly 02, 2021
目录
  • 前言
  • Array.prototype.includes
    • 语法
    • 参数
    • 返回值
    • 实例
  • Array.prototype.reduce
    • 语法
    • 参数
    • 返回值
  • 总结

 

前言

在过去的几年中,JavaScript语言进行了多次更新。为了跟上技术更新的脚步,时刻保持一颗学习的心。趁着休息的时间学习熟悉一下数组的includes、reduce的使用。

 

Array.prototype.includes

ES7添加对此方法的支持,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);
}

 

Array.prototype.reduce

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中的style.display属性操作
Mar 27 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
Sep 10 Javascript
javascript验证身份证号
Mar 03 Javascript
jQuery插件简单实现方法
Jul 18 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
Mar 13 Javascript
JavaScript监听手机物理返回键的两种解决方法
Aug 14 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
Vue.Draggable拖拽功能的配置使用方法
Jul 29 Javascript
javascript判断一个变量是数组还是对象
Apr 10 Javascript
微信小程序按钮点击动画效果的实现
Sep 04 Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 Javascript
Vue图片裁剪组件实例代码
vue3中provide && inject的使用
Jul 01 #Vue.js
React 并发功能体验(前端的并发模式)
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 #Vue.js
react中的DOM操作实现
Jun 30 #Javascript
elementui的el-popover修改样式不生效的解决
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
You might like
DSP接收机前端设想
2021/03/02 无线电
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
Python 模板引擎的注入问题分析
2017/01/01 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
解决python中的幂函数、指数函数问题
2019/11/25 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python实现KNN近邻算法
2020/12/30 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
入党申请人的自我鉴定
2013/12/01 职场文书
正规借条模板
2015/05/26 职场文书
聘用合同范本
2015/09/21 职场文书
Python 匹配文本并在其上一行追加文本
2022/05/11 Python