当前位置: 首页 > news >正文

几分钟内提升技能的8个 JavaScript 方法!

我们今天构建的大多数应用程序都需要进行某种数据收集修改。您最常遇到的常见操作是处理集合中的项。不要再使用 for-loop 循环的传统方式( let i=0; i < value.length; i++ )。

请注意,在 for 循环中使用 const 会报一个错误。原因是因为它在每次执行期间重新赋值,因此 ii++ 修改。所以每当你想到使用 constlet 时,问问自己 – 这个值会被重新声明吗?如果答案是肯定的,请选择 let ,如果不是,请选择 const

假设您要显示产品列表并对集合进行分类,过滤,搜索,修改或更新。或者您可能希望执行快速计算,例如求和,乘法等。实现这一目标的最佳方法是什么?

也许你不喜欢箭头功能,你不想花太多时间学习新东西,或者它们与你无关。放心,并不是只有你这样。我将向您展示如何在 ES5(普通函数)和 ES6(箭头功能)中实现。

请注意:箭头函数和函数声明/表达式不是等效的,不能 盲目替换 。请记住,this 关键字在两者之间的工作方式不同。

我们将要关注的方法有:

  1. Spread operator(展开操作符)
  2. for…of 迭代器
  3. includes()
  4. some()
  5. every()
  6. filter()
  7. map()
  8. reduce()

如果您想成为更好的Web开发人员,开始自己的事业,教别人或提高您的开发技能,我将每周发布最新的关于 Web 开发语言的技术和技巧。


1. Spread operator(展开操作符)

Spread operator(展开操作符)将数组展开为其对应的元素。它也可以用于对象字面量。

为什么我应该用它呢?

  • 这是一种简单且快速的方式来列出数组元素
  • 同时适用于数组和对象
  • 这是一种快速直观的传递参数的方法
  • 它只需要三个点 ...

示例:

假如你想展示一个喜爱的水果列表,但不是通过一个循环函数的方式。你可以用一个扩展操作符,像这样:

const favoriteFood = ['Pizza', 'Fries', 'Swedish-meatballs'];
console.log(...favoriteFood);
//Pizza Fries Swedish-meatballs复制代码

2. for…of 迭代器

for...of 语句循环/遍历集合,为你提供了修改特定元素的功能。 它取代传统的 for-loop 方式。

为什么我应该用它呢?

  • 这是添加或更新项的简单方法
  • 执行计算(求和,乘法等)
  • 和条件语句结合使用(if,while,switch等)
  • 代码干净,可读性高

示例:

假设你有一个工具箱,你想要展示里面所有的工具。 for...of 迭代器会让它变得更简单。

const toolBox = ['Hammer', 'Screwdriver', 'Ruler']
for(const item of toolBox) {
console.log(item)
}
// Hammer
// Screwdriver
// Ruler复制代码

3. Includes() 方法

include() 方法被用来检查数集合中是否包含指定的元素,如果存在则返回 true ,否则返回 false 。 请记住,它是区分大小写的:如果集合中的某项元素是 SCHOOL ,并且但你查询的是 school ,那么它将会返回 false

为什么我应该用它呢?

  • 构建简单的搜索功能
  • 这是一种确定元素项是否存在的直观方法
  • 它使用条件语句来修改,过滤等
  • 代码可读性高

示例:

比如,无论出于什么原因,你不知道车库里有什么车,你需要一个系统检查你想要的车是否在车库里。 includes() 可以拯救你!

const garge = ['BMW', 'AUDI', 'VOLVO'];
const findCar = garge.includes('BMW');
console.log(findCar);
// true复制代码

4. Some() 方法

some() 方法检查在数组中是否存在某些元素,如果存在返回 true ,否则返回 false 。这和 includes() 方法相似,但是 some() 方法的参数是一个函数,而不是一个字符串。

为什么我应该用它呢?

  • 它确保某些项目通过测试
  • 它使用函数执行条件语句
  • 使您的代码更具声明性
  • 它足够好用

示例:

假如你是一个俱乐部老板,并不在乎谁进入这俱乐部吧。但是有些人是不允许进来的,因为他们已经喝了很多酒(我的想象力很好)。查看以下 ES5 和 ES6 之间的差异:

ES5:

const age = [16, 14, 18];
age.some(function(person) {
return person >= 18;
});
// Output: true复制代码

ES6:

const age = [16, 14, 18];
age.some((person) => person >= 18);
// true复制代码

5. Every() 方法

every() 方法循环遍历数组,检查数组中的每个元素项,并返回 truefalse 。与 some()概念相似。但是每一项都必须通过条件表达式,否则返回 false

为什么我应该用它呢?

  • 它确保每个项目都通过测试
  • 您可以使用函数执行条件语句
  • 使您的代码更具声明性

示例:

上次你用 some() 方法允许一些未成年学生进入俱乐部,有人举报了这事,警察抓住了你。这次你不会让这种情况再次发生,你将用 every() 方法确保每一个进来俱乐部的人都是满足年龄限制的。

ES5:

const age = [15, 20, 19];
age.every(function(person) {
return person >= 18;
})
// Output: false复制代码

ES6:

const age = [15, 20, 19];
age.every((person)=> person >= 18);
// false复制代码

6. Filter() 方法

filter() 方法创建一个包含所有通过测试的元素的新数组。

为什么我应该用它呢?

  • 你可以修改原始数组
  • 你可以让你过滤掉那些你不需要的元素项
  • 让你的代码可读性更高

示例:

假如你只想要大于或者等于30的价格,过滤掉其他价格。

ES5:

//array
const prices = [25, 30, 15, 55, 40, 10];
prices.filter(function(price){
return price >= 30;
})
// Output: [30, 55, 40]复制代码

ES6:

const prices = [25, 30, 15, 55, 40, 10];
prices.filter((price) => price >= 30);
// [30, 55, 40]复制代码

7. Map() 方法

在返回新数组方面, map() 方法跟 filter() 方法相似。但是,唯一的区别是它用于修改数组中的元素项。

为什么我应该用它呢?

  • 它可以让你避免对原始数组进行修改
  • 你可以修改你所需的元素项
  • 代码可读性更高

示例:

假如你有一份价格清单。 您的经理需要一个清单,以便展示在税率增加25%后的新价格。 map() 方法可以帮助你。

ES5:

const productPriceList = [200, 356, 1500, 5000];
productPriceList.map(function(item){
return item * 0.75;
})
// [150, 267, 1125, 3750]复制代码

ES6:

const productPriceList = [200, 356, 1500, 5000];
productPriceList.map((item) => item * 0.75);
// [150, 267, 1125, 3750]复制代码

8. Reduce() 方法

reduce() 方法可用于将数组转换为其他内容,可以是整数,对象,promises 链(顺序执行的promises)等等。出于实际原因,一个简单的用例是对整数列表求和。简而言之,它将整个数组“缩短”为一个你想要的值。

为什么我应该用它呢?

  • 执行计算
  • 计算一个值
  • 计算重复数
  • 按属性分组对象
  • 按顺序执行promises
  • 这是一种快速执行计算的方法

示例:

假如你想得到这一周的消费总和, reduce() 可以帮你实。

ES5:

const weeklyExpenses = [200, 350, 1500, 5000, 450, 680, 350]
weeklyExpenses.reduce(function(first, last) {
return first + last;
})
// 8530复制代码

ES6:

const weeklyExpenses = [200, 350, 1500, 5000, 450, 680, 350]
weeklyExpenses.reduce((first, last) => first + last);
// 8530复制代码

希望你的 JavaScript 技能有所提升!


相关文章:

  • HTTP请求中的form data和request payload的区别
  • Linux内核-协议栈-从BSD Socket接口层到传输层1
  • centos7全离线安装MongoDB3.2.8集群
  • Java基础学习18(类的多态性以及子父类之间的转换机制)
  • Python的三种基本数据类型
  • 窗体数据Excle导入功能详解
  • Linux -LAMP架构介绍
  • 2018-2019-1 20165226 20165310 20165315 实验二 固件程序设计
  • html5本地存储
  • SQL Join 图示
  • P117、面试题18:树的子结构
  • [CF543A]/[CF544C]Writing Code
  • IOS 百度地图点聚合使用
  • PHP和MySQL Web开发从新手到高手,第2天-怎样用zend创建PHP项目
  • 支持 Windows 10 最新 PerMonitorV2 特性的 WPF 多屏高 DPI 应用开发
  • @jsonView过滤属性
  • [nginx文档翻译系列] 控制nginx
  • fetch 从初识到应用
  • idea + plantuml 画流程图
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • IP路由与转发
  • Logstash 参考指南(目录)
  • Twitter赢在开放,三年创造奇迹
  • Unix命令
  • Vim Clutch | 面向脚踏板编程……
  • Vue UI框架库开发介绍
  • 给Prometheus造假数据的方法
  • 记一次和乔布斯合作最难忘的经历
  • 前端学习笔记之观察者模式
  • 事件委托的小应用
  • 用mpvue开发微信小程序
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • AI算硅基生命吗,为什么?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • $jQuery 重写Alert样式方法
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4)Elastix图像配准:3D图像
  • (5)STL算法之复制
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (算法设计与分析)第一章算法概述-习题
  • (转载)Linux网络编程入门
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET Core中Emit的使用
  • .Net mvc总结
  • .netcore 获取appsettings
  • .NET企业级应用架构设计系列之开场白
  • .NET中使用Redis (二)
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)