原始数据

const data = [{
id: ,
spec: '规格1',
rules: [{
rank: ,
breaks:
},
{
rank: ,
breaks:
},
{
rank: ,
breaks:
}
]
},
{
id: ,
spec: '规格2',
rules: [{
rank: ,
breaks:
},
{
rank: ,
breaks:
},
{
rank: ,
breaks:
}
]
}
];

使用 forEach 遍历

function skuFormat(data) {
let RankList = [];
data.forEach(item => {
item.rules.forEach(ite => {
if (RankList.indexOf(ite.rank) === -) RankList.push(ite.rank);
})
})
let newData = [];
RankList.forEach(item => {
newData.push({
rank: item,
skus:[]
})
})
newData.forEach(item=>{
data.forEach(ite=>{
let Remark={
id:ite.id,
spec:ite.spec,
breaks:
}
try {
ite.rules.forEach(it=>{
if(item.rank===it.rank){
Remark.breaks=it.breaks;
item.skus.push(Remark);
throw(new Error('find item'));
}
})
} catch (error) {
}
})
})
return newData;
}
let newData= skuFormat(data);
console.log(newData)

使用 reduce 处理

let newData=data.reduce((pre, cur) => {
console.log(cur,pre)
const list = cur.rules.map(item => ({
rank: item.rank,
skus: [{
id: cur.id,
spec: cur.spec,
breaks: item.breaks
}]
}))
if (!pre.length) {
return list;
}
return pre.map((item, key) => {
return {
...item,
skus: [...item.skus, ...list[key].skus]
}
})
}, []);
console.log(newData)

reduce过滤数组的更多相关文章

  1. php中利用array_filter过滤数组为空值

    [导读] 在我们开发过程中,判断数组为空时你会想到什么方法呢?首先想到的应该是empty函数,不过直接用empty函数判断为空是不对的,因为当这个值是多维数的时候,empty结果是有值的.其实我们可以 ...

  2. PHP过滤数组中的空值

    php对数组的操作已经很完善了,提供给我们很多内置函数用以操作数组,其实可以用array_filter函数对PHP数组中的控制进行过滤 array_filter() 函数用回调函数过滤数组中的值.该函 ...

  3. Falsy Bouncer 过滤数组假值

    过滤数组假值 (真假美猴王) 删除数组中的所有假值. 在JavaScript中,假值有false.null.0."".undefined 和NaN. function bounce ...

  4. pandas数组和numpy数组在使用索引数组过滤数组时的区别

    numpy array 过滤后的数组,索引值从 0 开始. pandas Series 过滤后的 Series ,保持原来的索引,原来索引是几,就是几. 什么意思呢,来看个栗子: import num ...

  5. NSPredicate过滤数组数据

    NSPredicate编写软件时,经常需要获取一个对象集合,然后删除不满足条件的对象,保留符合条件的对象,从而提供一些有意义的对象.Cocoa提供了一个名为NSPredicate的类,他用于指定过滤器 ...

  6. php过滤数组空值

    如果我们想过滤数组里面的空值,例如null,,false,' '等等,可以使用php自带的一个函数,使用起来非常方便简洁: //测试数据 $data = array( '0' => '测试内容1 ...

  7. PHP:过滤数组中为空的值,并将返回的数组使用数值键,从 0 开始并以 1 递增

    首先了解下以下两个函数: 1.array_filter() 函数用回调函数过滤数组中的值. 2.array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名.(被返回的数组将使 ...

  8. 使用 reduce 实现数组 map 方法

    //使用 reduce 实现数组 map 方法 const selfMap2 = function (fn, context){ let arr = Array.prototype.slice.cal ...

  9. php利用array_filter()过滤数组空值

    利用array_filter过滤数组空值 <?php $array = array( 0 => '霜天部落', 1 => false, 2 => 1, 3 => null ...

随机推荐

  1. 长春理工大学第十四届程序设计竞赛A Rubbish——并查集&&联通块

    题目 链接 题意:在 $10^5 \times 10^5$ 的大网格上,给出 $n$ 的格点的坐标,求联通块数(上下左右及对角线都认为相邻) 分析 DFS需要遍历网格的每个格点,可能会超时? 初始化时 ...

  2. ACM-ICPC 2017 沈阳赛区现场赛 G. Infinite Fraction Path && HDU 6223(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6223 参考题解:https://blog.csdn.net/qq_40482495/article/d ...

  3. Codeforces Round #588 (Div. 2) E. Kamil and Making a Stream(DFS)

    链接: https://codeforces.com/contest/1230/problem/E 题意: Kamil likes streaming the competitive programm ...

  4. py操作mongodb总结

    python使用的版本 python3. python操作mongodb使用的是pymongo,安装方法: pip install pymongo 测试 PyMongo 接下来我们可以创建一个测试文件 ...

  5. Connect AS400 through firewall(JDBC will require ports: 449, 8470, 8471, and 8476)

    What TCP ports are used by ODBC to connect to the DB2/400?  8471/9471 http://search400.techtarget.co ...

  6. 路由器配置——OSPF协议(1)

    一.实验目的:用OSPF协议使全网互通 二.拓扑图 三.具体步骤配置 (1)R1路由器配置 Router>enableRouter#configure terminalEnter configu ...

  7. 【csp模拟赛3】组合数学

    思路: 先排序,取最大的在剩余左边任意找k-1个数,所以是排列组合,费马小定理求逆元,预处理阶乘,注意要取模.. 代码: #include<cstdio> #include<iost ...

  8. 【CUDA 基础】4.4 核函数可达到的带宽

    title: [CUDA 基础]4.4 核函数可达到的带宽 categories: - CUDA - Freshman tags: - 带宽 - 吞吐量 - 矩阵转置 toc: true date: ...

  9. linux下如何编辑txt文档

    利用vi命令 [root@bogon a]# vi a.txt   打开a.txt文档 vi a.txt后,键盘敲i,可以进入编辑模式, 输入完内容后按ESC键,键盘输入  :wq   可以保存并退出 ...

  10. Java线程的启动和停止(一)

    如何构造线程 在运行线程之前需要先构造线程对象,线程对象的构造需要指定线程所需要的属性,比如:所属线程组.线程优先级.是否为Daemon线程等信息.下面我们看一下,java.lang.Thread中对 ...