在 2021 年你需要掌握的 7 种关于 JavaScript 的数组方法
在新的一年我们学习这些有用的方法
JavaScript 为我们提供了许多处理数组的不同方法。我们将在几分钟内为您介绍 7 个基本且常用的数据方法,以提高您的 JS 开发技能。
1. Array.map()
当你在数组上使用 map()
方法的时候,它将在原始的数组创建一个新的数组。
这个 map()
方法接受一个参数,这个参数是个函数,这个函数可以去循环或遍历数组中的每个元素,也可以对里面的每个元素进行修改,然后组合返回出一个新的数组。
当你想在一个数组中把它的元素修改或更新,然后存储成一个新的数组的时候,这个 .map()
方法就会派上用场。
假设我们有一个包含汽车品牌的数组:
const cars = ["Porsche", "Audi", "BMW", "Volkswagen"];
当然,我们认为所有的车都很酷,我们想添加一些文字来表达这一点。 我们可以使用 .map()
方法:
const coolCars = cars.map((car) => `${car} is a pretty cool car brand!`);
// 结果:
[
"Porsche is a pretty cool car brand!",
"Audi is a pretty cool car brand!",
"BMW is a pretty cool car brand!",
"Volkswagen is a pretty cool car brand!",
];
这里, 这个 map()
方法用于创建新的修改后的数组
太棒了! 那个 map()
方法创建了一个新数组,并将文本添加到每个元素。
有时候数组包含对象(object
),我们又应该如何操作呢?
让我们看下面的例子,给这个汽车添加价格属性,变成对象的情况:
const carsWithPrice = [
{ brand: "Porsche", price: 100000 },
{ brand: "Audi", price: 80000 },
];
const carsWithPriceAndTax = cars.map((carObject) => {
return {
// Return the original car object
...carObject,
// but also add a new value containing the price with tax
priceWithTax: carObject.price * 1.2,
};
});
// 结果:
[
{ brand: "Porsche", price: 100000, priceWithTax: 120000 },
{ brand: "Audi", price: 80000, priceWithTax: 96000 },
];
使用 map()
方法以创建包含含税价格的新数组
总之,map()
方法是一种非常常用的方法,用于创建新数组、修改其内容并保持原始数组不变。
何时使用 Array.map()?
当您想要修改现有数组的内容并将结果存储为新数组的时候。
2. Array.filter()
你几乎猜到这个方法是什么的。
这个 .filter()
方法允许您根据特定条件获取数组中的元素。
就像 map()
方法一样,它将返回一个新数组并保持原始数组不变。
例如,使用汽车的例子,我们可以用基于汽车价格高于某个值来过滤数组。
在这里,我们有所有可用的汽车:
const cars = [
{ brand: "Porsche", price: 100000 },
{ brand: "Audi", price: 80000 },
{ brand: "Toyota", price: 30000 },
];
现在,假设所有价值 40,000
或更多的汽车都很贵。
我们可以使用 filter()
方法所有 “便宜” 和 “昂贵” 的汽车。
const expensiveCars = cars.filter((car) => car.price >= 40000);
const cheapCars = cars.filter((car) => car.price < 40000);
// 结果 - 贵车
[
{ brand: "Porsche", price: 100000 },
{ brand: "Audi", price: 80000 },
];
// 结果 - 便宜车
[{ brand: "Toyota", price: 30000 }];
使用过滤方法从数组中过滤 "便宜"、"昂贵"的汽车
检查数组的每个元素,看它是否符合标准,如果通过测试,它将在新数组中返回。
何时使用 Array.filter()?
当您想要从数组中删除不符合特定条件/条件的元素时。
3. Array.reduce()
现在这个可能有点难以理解。
简而言之,在数组中调用 .reduce()
方法,它会通过执行一个函数或方法来循环遍历数组中的每个元素,最终返回出一个值。
那个 reduce() 方法将回调函数作为其第一个参数,并将可选的初始值作为其第二个参数。如果未提供初始值,则使用数组的第一个值。这个回调函数将提供 accumulator
和 currentValue
参数用于执行 reduce
计算。
我知道这可能有点复杂,但没关系。
这里有一个简单的例子来展示 reduce()
方法:
假设我们想要获取数组中所有数字的总值。
const numbers = [13, 65, 29, 81, 47];
然后,我们可以使用 reduce ()
方法将所有这些值加在一起。
const total = numbers.reduce(
(accumulator, currentValue) => accumulator + currentValue,
0
);
// 结果 - 总数:
235;
使用 reduce
方法将数组的所有值相加
使用的另一种 reduce()
函数的方式是展平数组,已经有很多方法可以做到这一点,这就是其中之一。
const flattened = [
[0, 1],
[2, 3],
[4, 5],
].reduce((accumulator, currentValue) => accumulator.concat(currentValue), [])[
// Result - Flattened:
(0, 1, 2, 3, 4, 5)
];
使用 reduce
方法展平数组
何时使用 Array.reduce()?
当您想要通过操作数组的值将数组转换为单个值的时候。
4. Array.forEach()
现在这是一个经典。
那个 forEach()
方法的工作原理很像常规 for
循环。
它在数组上循环并对每个项目执行一个函数。 .forEach()
的第一个参数是个函数,这个函数的参数,包含数组的元素的当前值和索引。
让我们看一个汽车的例子:
const cars = [
{ brand: "Porsche", price: 100000 },
{ brand: "Audi", price: 80000 },
{ brand: "Toyota", price: 30000 },
];
我们可以遍历数组中的元素汽车,用 console.log
语句把汽车的品牌名和价格输出来。
cars.forEach((car) => {
console.log(`The ${car.brand} will cost you ${car.price} before taxes`);
});
// 结果:
("The Porsche will cost you 100000 before taxes");
("The Audi will cost you 80000 before taxes");
("The Toyota will cost you 30000 before taxes");
使用 forEach
方法去循环所有的汽车,然后用文本输出它的品牌名和价格。
何时使用 Array.forEach()?
当您想要简单地循环任何数组的每个元素而不构造新数组时。
5. Array.find()
这个 .find()
方法很像我们之前说的 .filter()
方法。
就像 .filter()
方法,您将能够传递数组值必须匹配的条件。
两者的区别在于 .find()
将仅返回与您提供的条件匹配的第一个元素。
以汽车为例, 让我们使用 .find()
方法在数组中找到第一个最贵的汽车:
const cars = [
{brand: "Porsche", price: 100000},
{brand: "Audi", price: 80000},
{brand: "Toyota", price: 30000}
];
const expensiveCar = cars.find(car => car.price >= 40000);
// 结果 - 贵车:
{brand: "Porsche", price: 100000}
使用 .find()
方法查找数组中的第一辆 “昂贵” 汽车
何时使用 Array.find()?
当你想要找到满足条件的数组中的第一个值的时候
6. Array.every()
也许你已经可以猜测这种方法是做什么的。
这个 .every()
方法将检查数组中的所有元素是否通过提供的条件。
如果数组中的所有元素都通过条件,则该方法将返回 true
。否则,它将返回 false
。
例如,我们可以使用 .every()
方法检查所有的车是否可以在 5 内年制造。
const cars = [
{ brand: "Porsche", price: 100000, builtIn: 2018 },
{ brand: "Audi", price: 80000, builtIn: 2019 },
{ brand: "Toyota", price: 30000, builtIn: 2019 },
];
const carsYoungerThanFiveYears = cars.every((car) => car.builtIn >= 2016);
// Result - Younger than 5 Years:
true;
使用 .every()
方法来确定是否所有的汽车都是在 5 年内制造的
何时使用 Array.every()?
当您想要确定数组中的所有元素满足特定条件的时候。
7. Array.some()
.some()
方法有点像 .every()
方法,但并不是所有元素的条件都满足后才通过测试,而是只要有其中一个元素满足条件,就会通过测试的。
只要 .some
方法找到成功的数组元素,就会停止遍历查找,就会返回 true
,然后,如果直到找最后一个元素还没成功,就会返回 false
。
让我们再次使用我们的汽车数组,但是这次我们将检查一些汽车是否超过 5 年。
const cars = [
{ brand: "Porsche", price: 100000, builtIn: 2018 },
{ brand: "Audi", price: 80000, builtIn: 2019 },
{ brand: "Toyota", price: 30000, builtIn: 2019 },
];
const carsOlderThanFiveYears = cars.some((car) => car.builtIn < 2016);
// 结果 - 小于 5 年的:
false;
何时使用 Array.some()?
当你要在数组中查看是否有找到满足条件的元素的时候
总结
这些方法都很简单学习与理解,只要多写例子就好,我们可以经常在各种项目中应用到它们。
在 2021 年你需要掌握的 7 种关于 JavaScript 的数组方法的更多相关文章
- 2021 年 iOS 应用程序开发七种最佳语言
移动应用程序现在几乎是每个在线业务的必备品.最新的 StatCounter 数据显示,多达56% 的在线连接是通过移动设备建立的,这使它们高于平板电脑和计算机.更重要的是,同一个消息来源说,其中27% ...
- 2021年3月-第03阶段-前端基础-JavaScript基础语法-JavaScript基础第01天
1 - 编程语言 1.1 编程 编程: 就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 计算机程序: 就是计算机所执行的一系列的指令集合,而程序全部都是用我们所掌 ...
- 2021年的十五个DevOps趋势预测
DevOps已经走过了很长的一段路,毫无疑问,它将在今年继续闪耀.由于许多公司都在寻找围绕其数字化转型的最佳实践,因此了解领导者认为该行业的发展方向非常重要.从这个意义上说,下面的文章收集了DevOp ...
- 2021最新Java基础知总结,助力大厂offer
本文是我花了三周时间整理出来的,希望对Java初学者有帮助~ Java概述 Java的特点 Java是一门面向对象的编程语言.面向对象和面向过程是一种软件开发思想. 面向过程就是分析出解决问题所需要的 ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- JDBC 基本操作
1. 简介 JDBC(Java DataBase Connectivity) 是有一些接口和类构成的API JDBC是J2SE的一部分, 又java.sql: javax.sql包组成. 应用程序 ...
- ACM学习
转:ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. US ...
- (转载)ACM训练计划,先过一遍基础再按此拼搏吧!!!!
ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...
- jqu
1 /*2 * 说明:3 * 本源代码的中文注释乃Auscarlin呕心沥血所作.旨在促进jQuery的传播以及向广大jQuery爱好者提供一个进阶4 *的途径,以让各位更加深入地了解jQuery,学 ...
随机推荐
- SparkSQL访问Hive源,MySQL源
SparkSQL访问Hive源,MySQL源 一.SparkSQL访问Hive源 软件环境 SparkSQL命令行模式可以直接连接Hive的 Java程序SparkSQL连接Hive 二.SparkS ...
- kafka背着你做了什么?
Kafka中有broker.主题.分区.副本等概念,底层有日志和日志分片. 我们先简单介绍一下这些概念,做个类比. broker可以简单理解为一台物理机,其实一台机器上可以有多个broker进程,但是 ...
- dp practice 1
https://codeforces.com/problemset/problem/553/A dp+组合数学 dp[i] 放前i种颜色的方法数 #include<bits/stdc++.h&g ...
- BZOJ-1086 [SCOI2005]王室联邦 (树分块)
递归处理子树,把当前结点当作栈底,然后递归,回溯回来之后如果栈中结点数量到达某一个标准时,弹出栈中所有的元素分到一个块中,最后递归结束了如果栈中还有元素,那么剩下的这些元素放在新的块中 题目:BZOJ ...
- 【poj 1061】青蛙的约会(数论--拓展欧几里德 求解同余方程)
题意:已知2只青蛙的起始位置 a,b 和跳跃一次的距离 m,n,现在它们沿着一条长度为 l 的纬线(圈)向相同方向跳跃.问它们何时能相遇?(好有聊的青蛙 (΄◞ิ౪◟ิ‵) *)永不相遇就输出&quo ...
- Network of Schools POJ - 1236 有向强连通图
//题意://给你n个学校,其中每一个学校都和一些其他学校有交流,但是这些边都是单向的.你至少需要给几个学校//传递消息可以使全部学校都收到消息,第二问你最少添加几条边可以使它变成一个强连通图//题解 ...
- Eureka详解系列(五)--Eureka Server部分的源码和配置
简介 按照原定的计划,我将分三个部分来分析 Eureka 的源码: Eureka 的配置体系(已经写完,见Eureka详解系列(三)--探索Eureka强大的配置体系): Eureka Client ...
- eclipse中使用debug,显示参数配置
打开Window---->Preferences------>java------>Editor-------->Hovers 效果:
- Windows下TeamViewer远程控制的安装与使用
Windows下远程控制的安装与使用 由于疫情,在家里写论文,资料数据都在学校,只能远程控制了,选的是TeamViewer. 分为控制机和被控制机,安装使用略有不同. 从该网址安装:https://w ...
- PAT L2-005. 集合相似度 【stl set】
给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的相似度. 输入格式: 输 ...