怎样使你的 JavaScript 代码简单易读(推荐)
作者:疯狂的技术宅 发布时间:2024-04-16 09:53:22
让我们先从怎样删除数组中的重复项这个简单问题开始。
复杂 - 使用 forEach 删除重复项
首先,我们新创建一个空数组,用 forEach() 在数组的每个元素上执行一次提供的函数。最后检查新数组中是否存在该值,如果不存在,则添加它。
function removeDuplicates(arr) {
const uniqueVals = [];
arr.forEach((value,index) => {
if(uniqueVals.indexOf(value) === -1) {
uniqueVals.push(value);
}
});
return uniqueVals;
}
简单 - 使用 filter 删除重复项
用 filter 方法创建一个包含所有元素的新数组,通过提供的函数进行测试。基本上我们只需要迭代数组,并检查当前元素在数组中出现的第一个位置是否和当前位置相同。当然,这两个位置对于重复元素来说是不同的。
function removeDuplicates(arr) {
return arr.filter((item, pos) => arr.indexOf(item) === pos)
}
简单 - 使用 Set 删除重复项
ES6 提供了 Set 对象,这使事情变得更加容易。 Set 仅允许存在唯一值,所以当你传入数组时,它会自动删除重复的值。
但是,如果你需要一个包含唯一元素的数组,为什么不一开始就用 Set 呢?
function removeDuplicates(arr) {
return [...new Set(arr)];
}
接下来让我们解决第二个问题:写一个函数,向该函数传入一组非负整数,其中的值各不不同,要求使它们连续,并返回缺失的数字个数。
对于const arr = [4,2,6,8],输出应为
countMissingNumbers(arr)= 3
你可以看到 3,5 和 7 是缺失的。
复杂 - 使用 sort 和 for 循环解决
要获得最小和最大的数字,我们需要用用 sort方法按升序进行排序来达到这个目的,然后从最小的数字循环到最大的数字。每次检查数组中是否存在应该出现的序号,如果不存在,就对计数器加一。
function countMissingNumbers(arr) {
arr.sort((a,b) => a-b);
let count = 0;
const min = arr[0];
const max = arr[arr.length-1];
for (i = min; i<max; i++) {
if (arr.indexOf(i) === -1) {
count++;
}
}
return count;
}
简单 - 使用 Math.max 和 Math.min 求解
这个解决方案有一个简单的解释:Math.max()函数返回数组中最大的数字,而Math.min() 返回数组中最小的数字。
首先,如果没有丢失数字,我们能知道数组中有多少个数字。所以可以用以下公式 maxNumber - minNuber + 1,并用这个结果减去数组长度,得到的差就是缺失数字的个数。
function countMissingNumbers(arr) {
return Math.max(...arr) - Math.min(...arr) + 1 - arr.length;
}
最后一个问题是检查字符串是否为回文。所谓 回文 是一个从左到右和从右到左读起来都一样的字符串。
复杂 - 使用 for 循环检查
这个方法的循环从字符串的第一个字符开始,一直到字符串长度的一半。字符串中最后一个字符的索引是 string.length-1,倒数第二个字符的索引是string.length-2,依此类推。所以在这里我们检查从左边开始的指定索引处的字符是否等于右边指定索引处的字符。如果它们不相等,就返回false。
function checkPalindrome(inputString) {
let length = inputString.length
for (let i =0; i<length / 2; i++) {
if (inputString[i] !== inputString[length - 1 -i]) {
return false
}
}
return true
}
简单 - 用 reverse 和 join 检查
我认为这个解决方案简单到不需要解释,因为代码本身说明了一切。我们只需使用 spread operator 从字符串创建一个数组,然后reverse数组,最后用 join 方法将其再次转换为字符串,并与原始字符串进行比较。
function checkPalindrome(string) {
return string === [...string].reverse().join('');
}
保持简单!
当有更简单的方法时,为什么要搞得那么复杂?希望你能从这篇文章中学到一些很有意思的思路。祝你有一个美好的编码时间,尽量不要让生活中简单的事情复杂化。
以上所述是小编给大家介绍的怎样使你的 JavaScript 代码简单易读详解整合网站的支持!
来源:https://segmentfault.com/a/1190000018797269


猜你喜欢
- 目录urllib库作用Urllib 库下的几种模块的基本使用一、urllib.request模块1.功能2.常用方法参数说明:总结urlli
- 前言最近学习了 django 的一个 restframework 框架,对于里面的执行流程产生了兴趣,经过昨天一晚上初步搞清楚了执行流程(部
- 目录简介环境要求:安装小试一下创建爬虫将请求头转为json格式使用简介feapder 是一款上手简单,功能强大的Python爬虫框架,使用方
- 利用MySQLfs这个工具,我么可以在MySQL关系数据库中存储文件系统。MySQLfs将文件系统中文件的字节内容分解成数据库中的元组,而数
- 1、说明用于等待按钮。当用户按下按钮时,句子将被执行并获得返回值。2、语法retval=cv2.waitKey([delay])Retval
- 本文实例为大家分享了python读写json数据的具体代码,供大家参考,具体内容如下案例:在web应用中常常用到json数据进行传输数据,本
- 在官网下载python和pycharm的安装包python: https://www.python.org/downloads/window
- 1、生成器函数包含yield from表达式。2、在yield from表达式处暂停委派生成器,调用方可直接将数据发送给子生成器。3、子生成
- SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它 同时引入了更强的程序逻辑。 PL/SQL支持DML命令和
- 1、使用while循环实现输出2 - 3 + 4 - 5 + 6 ... + 100的和#方法一#从2开始计算i = 2#定义一个变量用于保
- 前言本文主要给大家介绍的是关于在Python3使用PyMongo的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍:Mong
- defer用于资源的释放,会在函数返回之前进行调用。如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。def
- 本文实例讲述了js设计模式之单例模式原理与用。分享给大家供大家参考,具体如下:关于设计模式,我的理解是它是业务代码的提前解决方案。意思就是说
- 前言对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图。不过一些比较复杂的图,有时候还是要画点时间的,今天
- python使用函数改变list函数内改变外部的一个list如果这么写def rotate(nums, k): l
- 1.检查重复元素下面的方法可以检查给定列表中是否有重复的元素。它使用了 set() 属性,该属性将会从列表中删除重复的元素。def all_
- 问题描述 为了程序的正常运行,进行异常处理是有必要的,甚至于有时候,我们会主动的抛出异常,然后让程序进行异常捕获,再进行进一步的处理。但是,
- 方法import pandas as pdimport numpy as npimport seaborn as snsdf = pd.Da
- 1. 背景在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,
- 模型的恢复对于的模型的恢复来说,需要首先恢复模型的整个图文件,之后从图文件中读取相应的节点信息。存储的模型文件包括四个子文件,如下:&nbs