filter、map、reduce 一次性说清楚

这篇具有很好参考价值的文章主要介绍了filter、map、reduce 一次性说清楚。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

filter

filter() 方法是 JavaScript 中数组的一个方法,用于筛选数组中符合指定条件的元素,并返回一个新的数组,新数组中包含筛选出的元素。

filter() 方法语法如下:

arr.filter(callback(element[, index[, array]])[, thisArg])

其中,参数 callback 是一个回调函数,用于定义筛选规则,该函数接收三个参数 element、index、array,分别代表当前正在被处理的元素、该元素的索引和数组本身。函数返回 true 时,当前元素被保留到新数组中;返回 false 时,当前元素被过滤掉,不会出现在新数组中。

除了 callback 参数之外,filter() 方法还支持一个可选参数 thisArg,用于指定回调函数中的 this 指向,这个参数可以省略。如果指定了 thisArg 参数,则 callback 中的 this 指向该参数的值。

下面是一些 filter() 方法的例子:

// 过滤一个数组中的奇数,返回一个新的数组
const nums = [1, 2, 3, 4, 5, 6];
const odds = nums.filter(num => num % 2 !== 0);
console.log(odds); // [1, 3, 5]

// 针对数组对象进行筛选,返回一个新的对象数组
const users = [
  { name: 'Jack', age: 24 },
  { name: 'Peter', age: 30 },
  { name: 'Mary', age: 26 }
];
const adults = users.filter(user => user.age >= 18);
console.log(adults); // [{ name: 'Jack', age: 24 }, { name: 'Peter', age: 30 }, { name: 'Mary', age: 26 }]

// 根据数组对象进行筛选,返回一个新的对象数组
const users = [
  { name: 'Jack', age: 24 },
  { name: 'Peter', age: 30 },
  { name: 'Mary', age: 26 }
];
const jack = users.filter(user => user.name === 'Jack');
console.log(jack); // [{ name: 'Jack', age: 24 }]

map

map() 方法是 JavaScript 中数组的一个方法,用于对数组中的每个元素进行转换,并将转换后的元素存储到一个新的数组中,最终返回这个新数组。

map() 方法语法如下:

arr.map(callback(element[, index[, array]])[, thisArg])

其中,参数 callback 是一个回调函数,用于定义转换规则,该函数接收三个参数 element、index、array,分别代表当前正在被处理的元素、该元素的索引和数组本身。函数返回的值将被存储到新数组中。

除了 callback 参数之外,map() 方法还支持一个可选参数 thisArg,用于指定回调函数中的 this 指向,这个参数可以省略。如果指定了 thisArg 参数,则 callback 中的 this 指向该参数的值。

下面是一些 map() 方法的例子:

// 将一个数组中的所有元素乘以 2,返回一个新的数组
const nums = [1, 2, 3, 4, 5];
const doubles = nums.map(num => num * 2);
console.log(doubles); // [2, 4, 6, 8, 10]

// 对数组对象中的某个属性进行操作,返回一个新的对象数组
const users = [
  { name: 'Jack', age: 24 },
  { name: 'Peter', age: 30 },
  { name: 'Mary', age: 26 }
];
const userNames = users.map(user => user.name);
console.log(userNames); // ['Jack', 'Peter', 'Mary']

// 根据数组对象进行转换,返回一个新的对象数组
const users = [
  { name: 'Jack', age: 24 },
  { name: 'Peter', age: 30 },
  { name: 'Mary', age: 26 }
];
const newUsers = users.map(user => ({ ...user, gender: 'unknown' }));
console.log(newUsers); // [{ name: 'Jack', age: 24, gender: 'unknown' }, { name: 'Peter', age: 30, gender: 'unknown' }, { name: 'Mary', age: 26, gender: 'unknown' }]

map和filter的区别是什么

map() 和 filter() 方法都是 JavaScript 数组的方法,它们的作用不同。

map() 方法用于对数组中的每个元素进行转换,并将转换后的元素存储到一个新的数组中,最终返回这个新数组。该方法不会改变原来的数组。通常情况下,使用 map() 方法可以简化代码,并提升程序的可读性和可维护性。

filter() 方法用于对数组中的元素进行过滤,并将符合条件的元素存储到一个新的数组中,最终返回这个新数组。该方法不会改变原来的数组。通常情况下,使用 filter() 方法可以轻松地从大量数据中筛选出需要的数据,同时也可以提高程序的可读性和可维护性。

可以总结出 map() 与 filter() 的区别:

  • map() 方法会将数组中的每个元素进行转换,并返回一个新数组;而 filter()方法会根据指定的条件筛选数组中的元素,并返回一个新数组。
  • map() 方法没有改变原数组的内容,而 filter() 方法也没有改变原数组的内容。
  • map() 方法会保留原数组中的每个元素,只是将其转化为另一种形式,即新数组的长度与原数组的长度相等;而 filter()方法将会根据筛选条件保留或排除原数组中的各个元素,使得返回的新数组长度可能小于原数组长度。

因此,如果想要对数组中的元素进行转换操作,则应使用 map() 方法;如果想要根据某个条件筛选出符合条件的元素,则应使用 filter() 方法

reduce

reduce() 是 JavaScript 数组的一个方法,它可以用于对数组元素执行一个归并操作,并将最终结果返回。通常情况下,reduce() 可以用来进行累加、求和、求平均值等操作。下面是 reduce() 方法的详细使用方法:

Array.prototype.reduce(callback[, initialValue]) 方法接受一个回调函数 callback 和一个可选的初始值 initialValue 作为参数。其中,callback 函数接受四个参数:累计器(也就是上一次回调返回的值或者初始值),当前元素,当前索引和原始数组。

具体使用时,reduce() 方法从数组的第一个元素开始遍历,每次将遍历到的元素传入回调函数中进行处理,并将处理结果作为下一次遍历的初始值传入回调函数中。最后,返回的结果即为最终的累积值。

如果没有指定初始值 initialValue,则 reduce() 方法会从数组的第二个元素开始遍历,将第一个元素作为初始值传入回调函数中。如果数组为空且没有提供初始值,则 reduce() 方法会抛出一个 TypeError 异常。

下面是一些 reduce() 方法的例子:文章来源地址https://www.toymoban.com/news/detail-455118.html

// 求数组所有元素的和
const nums = [1, 2, 3, 4, 5];
const sum = nums.reduce((acc, curr) => acc + curr);
console.log(sum); // 15

// 使用初始值计算数组所有元素的和
const sumWithInit = nums.reduce((acc, curr) => acc + curr, 10);
console.log(sumWithInit); // 25

// 求数组所有元素的平均值
const avg = nums.reduce((acc, curr, index, array) => {
  acc += curr;
  if (index === array.length - 1) {
    return acc / array.length;
  } else {
    return acc;
  }
});
console.log(avg); // 3

// 对一个对象数组中的某个属性求和
const users = [
  { name: 'Jack', score: 92 },
  { name: 'Peter', score: 85 },
  { name: 'Mary', score: 88 }
];
const totalScore = users.reduce((acc, curr) => acc + curr.score, 0);
console.log(totalScore); // 265

到了这里,关于filter、map、reduce 一次性说清楚的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Visual Studio 2022 中使用scanf报错的解决方法(一次性解决)

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面一章给大家介绍了Visual Studio 2022 的安装和使用!    ⛳️ 但是 Visual Studio 2022 并不是按照标准的C语言标准,所以使

    2024年02月16日
    浏览(83)
  • chatgpt赋能python:Python如何一次性输入多个数?教你使用Python中的多种方法

    在python编程中,我们经常需要输入多个数值。为了提高效率,Python提供了多种方法可以一次性输入多个数值。本篇文章将介绍几种常见的,在Python中如何一次性输入多个数值的方法。 最基础的方法是使用Python中内置的 input() 函数以及字符串的 split() 函数。 input() 函数用于从控

    2024年02月12日
    浏览(70)
  • 谷歌发布Self-Debug方法,让大模型学会自己修bug,一次性生成正确代码

    文 | 智商掉了一地 你有没有想过,让一台计算机诊断和修复自己生成的错误代码?一篇最新的研究论文介绍了一种名为 Self-Debugging 的技术,通过在生成的代码中添加自解释的信息,让计算机像一个可以自己修复代码的程序员一样调试自己的 BUG。 随着大型语言模型(LLMs)在

    2023年04月19日
    浏览(73)
  • python 一次性删除列表(list)的空白元素(空内容) 或者 一次性删除列表(list)中的指定元素

    看看下述代码: 输出: 当你遇见这种情况,有哪些方法来去除里面的空内容呢(即 \\\'\\\' )? 1.1 删除空内容(方法一) : 输出: 1.2 删除空内容(方法二) : 需要 配合 lambda 表达式 一起使用! 输出: 2.3 删除指定内容 : 输出: 注 :此方法既可以删除空元素,也可以删除指

    2024年02月03日
    浏览(94)
  • 《一次性分割一切》阅读笔记

    目录 0 体验 1 摘要 2 十个问题 参考文献 体验地址 :SEEM - a Hugging Face Space by xdecoder 体验结果 : 将哈士奇和汽车人从图片中分割出来。 尽管对于交互式人工智能系统的需求不断增长,但在视觉理解(例如分割)中的人工智能交互方面,很少有全面的研究。本文受到基于提示的

    2024年02月01日
    浏览(89)
  • 公众号一次性订阅消息

    洛塔服务号回复007获取代码。 之前发布通知,要用订阅通知替代一次性订阅消息,不知道是被骂的太惨还是技术原因,一次性订阅消息还是一直能用。 和模板消息不同的是,一次性订阅消息无需用户关注公众号,但是必须用户点击同意发送才能接收消息。 模板消息:需要关

    2024年02月09日
    浏览(75)
  • Python:一次性输出多个量

    有的时候我们在输入一个字符串时,需要在中间加一个int类型变量时,如果一段一段输出就要写三个print,非常麻烦。今天bug君就给大家讲讲如何在Python里一次性输出多个量。 粽所粥汁,在Python里输出需要写 print(\\\"输出内容\\\") ,而输出一个变量则需要写 print(变量名) 。 注意:

    2024年02月04日
    浏览(122)
  • 一次性打包学透 Spring

    不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很多 Java 开发者从工作的第一天开始就在使用 Spring Framework,甚至有人调侃“不会 Spring 都不好意思自称是个 Java 开发者”。 之所以出现这种局面,源于 Spring 是一个极为优秀的一站式集成框架

    2023年04月19日
    浏览(64)
  • charles证书安装,一次性说明白

    windows上安装好charles后,需要给软件安装证书。 1、点击help - SSL proxying,选择第二个install Charles Root Certificate证书安装   2、如果以前安装过证书,但是过期了(有效期一般1年),证书界面会显示过期字样,此时就要先点击一下Reset Charles Root Certificate,然后再点击第一步中的

    2024年02月05日
    浏览(113)
  • 如何一次性启动多个SpringBoot项目

    在做微服务这块的架构设计的时候,当微服务数量越来越多的时候,本地启动各个服务的时候,可能得手动启动每个启动类。这样就很麻烦,因此记录一下如何在 idea 里面一键启动所有的项目。 比如我项目里面有5个微服务:那么就对应了5个启动类。 1.项目右上角编辑: 2.点

    2024年02月16日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包