ES6 三层for循环的链式写法
假设有一个很复杂的数据,并且数据嵌套层数很多。如何避免用三层for循环呢?
有以下梨子,我们需要找到val值为12的,这个对象?
'use strict'
let groups = [{
content: [{
permissions: [{
val: 1
}, {
val: 2
}]
}, {
permissions: [{
val: 3
}, {
val: 4
}]
}]
}, {
content: [{
permissions: [{
val: 5
}, {
val: 6
}]
}, {
permissions: [{
val: 7
}, {
val: 8
}]
}]
}, {
content: [{
permissions: [{
val: 9
}, {
val: 10
}]
}, {
permissions: [{
val: 11
}, {
val: 12
}]
}]
}] console.log(groups);
let filterA = groups
.map(a => a.content)
.flat() //数组扁平化
.map(b => b.permissions)
.flat()
.filter(c => c.val === 12) console.log(filterA);
由于flat语法,需要在chrome69以上版本来进行调试哦
let filterA = groups
.map(a => a.content)
.flat() //数组扁平化
.map(b => b.permissions)
.flat()
.filter(c => c.val === 12)
代码的逻辑比较简单,符合函数式编程的思想。
map//返回一堆新数组,不改变源数组,我们就可以获取到下一层,但是数组的层数依旧还是3层,
所以需要flat,来消除一层数组,也就数组扁平化。
参考阮老师的解释
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]] flat()的参数为2,表示要“拉平”两层的嵌套数组
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5] 如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
ES6 三层for循环的链式写法的更多相关文章
- JQuery事件的链式写法
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- jquery事件链式写法
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Delphi Sysem.JSON 链式写法(转全能中间件)
链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...
- ajax操作的链式写法
ajax操作的传统写法: $.ajax({ url: url, success: function(){ doWhenSuccess(); }, error: function(){ doWhenEr ...
- Jquery | 基础 | 事件的链式写法
$(".title").click(function () { $(this).addClass("curcol").next(".content&q ...
- Java 链式写法
Java链式写法,子类继承父类的属性,也可以返回子类的对象,只是需要重写基类的Set方法 public class MyLS { public static void main(String[] ar ...
- Delphi Sysem.JSON 链式写法
链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...
- Java链式写法
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11613067.html Java 链式写法:详细看代码 package chain; /** ...
- javascript 链式写法
熟悉Jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量. 链式的实现方式:链式操作是在对象的方法中通过最后返回 ...
随机推荐
- xml数据改动
public void reXml ( string namepngname ) { XmlDocument doc = new XmlDocument(); doc.Load(_xmlpath); ...
- 在MS Test中如何测试private方法
前言: 在博客开始之前,我们先讨论一下是否应该对private方法做测试,通常有两种观点: private方法应该被测试: private方法不应该被测试: 我们以下面的代码为例子来进行说明: pub ...
- firefox快速刷新error及解决办法
问题: 测试发过来bug,说——频繁F5刷新页面,会闪现未加载完样式的页面: 开发用的Chrome,没发现这个问题,测试用的firefox,于是从浏览器的刷新加载机制方面搜索解决办法,没搜到,运 ...
- 数据挖掘算法以及其实现zz
实验一 分类技术及其应用 实习要求: 基于线性回归模型拟合一个班学生的学习成绩,建立预测模型.数据可由自己建立100个学生的学习成绩. 1) 算法思想: 最小二乘法 设经验方程是y=F(x ...
- centos搭建本地yum源,
比如将文件夹:/opt/mir/这个文件夹做成本地源: 1.在/etc/yum.repos.d/目录下新建一个.repo文件,比如mir-base.repo,在里面加入如下: [local]name= ...
- Appium之手机屏幕亮度控制条处理
手机设置下的屏幕亮度控制条看上去是悬浮的,想手动调整亮度有两种方法:一.在控制条上左右任意拖动:二.在控制条上点击任意一点.如下图:
- ZSTU4270 同源数 2017-03-22 14:34 82人阅读 评论(0) 收藏
4270: 同源数 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1284 Solved: 224 Description 如果x和y的质因子集合完 ...
- 数据恢复软Extundelete
1>概述 作为一名运维人员,保证数据的安全是根本职责,所以在维护系统的时候,要慎重和细心,但是有时也难免发生出现数据被误删除的情况,这个时候该如何 快速.有效地恢复数 ...
- [编译,报错以及其他] 有关C/C++中int不能用-2147483648当最小值的问题
这个取决于今早看耗子叔的微博: 这里说到了int的取值范围的问题,int的取值是-2147483648 ~ 2147483647,但是如果直接在编译器(VS2013)中使用-2147483648会报错 ...
- androidstudio提示adb错误:cannot parse version string:kg01的解决方法
打开adb.exe的文件目录,同时按下shift和鼠标右键,打开cmd后运行一下这个命令adb kill-server