js中关于数组处理的一些小技巧
1 reduce方法同时实现map和filter
假设现在有一个数组,然后遍历它的每一项(map的功能)然后筛选出其中的一部分(filter的功能)。如果使用map和filter的话,我们需要遍历这个数组两次。
在下面的代码中,我们将数列中的值翻倍,然后挑选出那些大于50的数:
- const numbers = [10, 20, 30, 40];
- const numOver50 = numbers.reduce((finalArr, num) => {
- num = num * 2;
- if (num > 50) {
- finalArr.push(num);
- }
- return finalArr; //finalArr为最后符合筛选条件的数组
- }, []);
- numOver50; // [60, 80]
2 统计数组中相同项的个数
很多时候,我希望统计数组中重复出现项的个数然后用一个对象表示。那么我们可以使用reduce方法处理这个数组。
下面的代码将统计每一种car的数目然后把总数用一个对象表示。
- var cars = ['BMW','Benz', 'Benz', 'Tesla', 'BMW', 'Toyota'];
- var carsObj = cars.reduce(function (obj, name) {
- obj[name] = obj[name] ? ++obj[name] : 1;
- return obj;
- }, {});
- carsObj; // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }
3 使用解构来交换参数数值
有时候我们会将函数返回的多个值放在一个数组里。我们可以使用数组解构来获取其中每一个值。
- let param1 = 1;
- let param2 = 2;
- [param1, param2] = [param2, param1];
- console.log(param1) //
- console.log(param2) // 1
//当然还有其他的方法进行交换之,例如
b = [a, a = b][0];
a = a + b; b = a - b; a = a - b ;
- var temp = a; a = b; b = temp ;
4 接收函数返回的多个结果
在下面的代码中,我们从/post中获取一个帖子,然后在/comments中获取相关评论。由于我们使用的是async/await,函数把返回值放在一个数组中。而我们使用数组解构后就可以把返回值直接赋给相应的变量。
- async function getFullPost(){
- return await Promise.all([
- fetch('/post'),
- fetch('/comments')
- ]);
- }
- const [post, comments] = getFullPost();
5 将数组平铺到指定深度
使用递归,为每个深度级别 depth 递减 1 。 使用 Array.reduce() 和 Array.concat() 来合并元素或数组。 基本情况下,depth 等于 1 停止递归。 省略第二个参数,depth 只能平铺到 1 (单层平铺) 的深度。
- const flatten = (arr, depth = 1) =>
- depth != 1
- ? arr.reduce((a, v) => a.concat(Array.isArray(v) ? flatten(v, depth - 1) : v), [])
- : arr.reduce((a, v) => a.concat(v), []);
- flatten([1, [2], 3, 4]); // [1, 2, 3, 4]
- flatten([1, [2, [3, [4, 5], 6], 7], 8], 2); // [1, 2, 3, [4, 5], 6, 7, 8]
6 数组的对象解构
数组也可以对象解构,可以方便的获取数组的第n个值
- const csvFileLine = '1997,John Doe,US,john@doe.com,New York';
- const { 2: country, 4: state } = csvFileLine.split(',');
- country // US
- state // New Yourk
大概就是这么多,有一部分我也不是很明白,希望能帮到大家。
参考链接:https://mp.weixin.qq.com/s/wZHVHKRtjRzZHCb3BrHOhw
js中关于数组处理的一些小技巧的更多相关文章
- js中的数组
上网查了一下,js中的数组包含的内容还真不少.先给出两个学习的链接: w3school链接:http://www.w3school.com.cn/js/js_obj_array.asp 博客园链接:h ...
- JS中Array数组的三大属性用法
原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...
- JS中对数组元素进行增删改移
在js中对数组元素进行增删改移,简单总结了一下方法: 方法 说明 实例 push( ); 在原来数组中的元素最后面添加元素 arr.push("再见58"); unshift( ) ...
- js中的数组遍历
js中的数组遍历是项目中经常用到的,在这里将几种方法做个对比. ! for循环:使用评率最高,也是最基本的一种遍历方式. let arr = ['a','b','c','d','e']; for (l ...
- 遍历js中的数组
可以使用js中的for循环,或者forEach方法:也可以使用Ext中的方法遍历js中的数组 代码如下: /** * 遍历数组 */ var arr = ['越南', '新加坡', '美国', '俄罗 ...
- java:JavaScript3(innerHTML,post和get,单选框,多选框,下拉列表值得获取,JS中的数组,JS中的正则)
1.innerHTML用户登录验证: <!DOCTYPE> <html> <head> <meta charset="UTF-8"> ...
- JS中的数组复制问题
JS中的数组复制问题 前言 首先提到复制,也就是拷贝问题,就必须要明确浅拷贝和深拷贝. 浅拷贝:B由A复制而来,改变B的内容,A也改变 深拷贝:B由A复制而来,改变B的内容,A的内容不会改变 总的来说 ...
- [转]11个教程中不常被提及的JavaScript小技巧
原文地址: https://www.cnblogs.com/ld1024/p/10723827.html 这次我们主要来分享11个在日常教程中不常被提及的JavaScript小技巧,他们往往在我们的日 ...
- 11个教程中不常被提及的JavaScript小技巧
这次我们主要来分享11个在日常教程中不常被提及的JavaScript小技巧,他们往往在我们的日常工作中经常出现,但是我们又很容易忽略. 1.过滤唯一值 Set类型是在ES6中新增的,它类似于数组,但是 ...
随机推荐
- python集合set相关操作
定义: 1.不同元素组成 2.无序 3.集合中的元素必须是不可变类型 创建集合 1 s = {1,2,3,4,5,6,7,8} 1.定义可变集合 1 2 3 >>> set_test ...
- 移除Excel工作表密码保护小工具含C#源代码
有朋友发了个Excel.xlsx文件给我,让我帮忙看看里面是怎么做出来的.打开审阅后发现,每个Excel工作表都添加了密码保护: 看不到里面的隐藏列和公式等等,感觉很神秘.于是研究了一下Excel文件 ...
- Vue一、起步
1.参考资料-官网 https://cn.vuejs.org/v2/guide/ 2.介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 与其它大型框架不同,V ...
- tomcat 编码给为utf-8
在tomcat下找到server.xml 打开server.xml,在下图加上URIEncoding="UTF-8".
- WatchDirService 实时监控
import config.Config; import java.io.IOException; import java.nio.file.*; import java.util.List; imp ...
- mysql的执行过程
1 总流程 https://www.cnblogs.com/annsshadow/p/5037667.html 2 优化器 https://www.cnblogs.com/olinux/p/5 ...
- Python文件操作中的方法:.write()换行
active =Truewhile active: message =input("\nPlease input your name:\n") if message =='q': ...
- centos7安装nginx1.10.1
安装nginx. 1.首先在根目录下创建一个software文件夹用来存储下载的压缩包. 2.然后cd跳转的software文件夹下,进行压缩包的下载 wget -c https://nginx.or ...
- echarts 图的点击事件(含:点击重复触发的问题及其解决方法)
今天用echarts的时候发现一个问题 鼠标指向不同地市触发一个事件展示该地区趋势图 但是但是后台中不管我第几次鼠标指向都会触发两次指向事件 现在贴出解决办法: 问题完美解决.但是为什么会调用两次, ...
- 高校表白APP-冲刺第四天
第四天,我们进行了团队的的四次会议. 一.任务: 昨天任务:完成登录界面注册界面修改密码界面. 今日任务:完成跳转,并解决闪退问题. 明日任务:连接本地数据库,进行APP的第一次登陆. 二.遇到的困难 ...