//1.找出数组中相同的元素
 getRepeatNum(arr) {
let obj = {};
for (let i = 0, len = arr.length; i < len; i++) {
if (obj[arr[i]] == undefined) {
obj[arr[i]] = 1;
} else {
obj[arr[i]]++;
}
}
for (let key in obj) {
obj[key] <= 1 && delete obj[key];
}
return Object.keys(obj);
},
//2.根据数组的某个参数进行分组

    getGroupNum(arr) {
        let newArry = {};
for (let i = 0; i < arr.length; i++) {
if (newArry[arr[i].num.errcode]) {
newArry[arr[i].num.errcode].push(arr[i].num.num)
}
else {
newArry[arr[i].num.errcode] = [arr[i].num.num]
}
}
return newArry
},

变型:

      getGroupNum(arr) {
let newArry = {};
for (let i = 0; i < arr.length; i++) {
const obj = {
time:arr[i].statis_time,
num:arr[i].num.num,
};
if (newArry[arr[i].num.errcode]) {
newArry[arr[i].num.errcode].push(obj)
}
else {
newArry[arr[i].num.errcode] = [obj]
}
}
return newArry
},

遍历:数组或对象

                    let errcodeRepeat = this.getRepeatNum(errcode);
let seriesData = this.getGroupNum(res.data.info);
errcodeRepeat.map(item=>{//数组
series.push({
name:item,
data:seriesData[item],
type:'line',
})
});
                    const seriesObj = this.getGroupNum(res.data.info);
const xAxis = res.data.info.map(item => item.statis_time);
// const xAxisGroup = [];
const errcode = [];
const series = [];
Object.keys(seriesObj).map(key=>{//对象:key和obj(key)
errcode.push(key);
// const xAxisData = [];
const seriesData = [];
seriesObj[key].map(item=>{
// xAxisData.push(item.time);
seriesData.push(item.num);
});
// xAxisGroup.push({
// data:xAxisData,
// });
series.push({
name:key,
data:seriesData,
type:'line',
});
});

总结:

首先拿到的是一堆未分组的数组:[{...}];

其次根据某个字段进行分组等到:

1.对象:{key:[...]}

2.新数组:[

{ name:key,data:[]}

...

]

实现方法:

//数组变型得到新数组
arryGroupMatch(arr) {
var map = {}
var dest = []
for (var i = ; i < arr.length; i++) {
var ai = arr[i]
if (!map[ai.errno]) {
dest.push({
errno: ai.errno,
data: [ai]
})
map[ai.errno] = ai
} else {
for (var j = ; j < dest.length; j++) {
var dj = dest[j]
if (dj.errno === ai.errno) {
dj.data.push(ai)
break
}
}
}
}
return dest
} // lodash插件方法:
import _ from 'lodash'
const oldArr = _.groupBy(arr, 'xxx');//对象
let newArr = []
Object.keys(oldArr).forEach(key=>{// 数组
newArr.push({name:key,data:oldArr[key]})
})

JS数组分组的更多相关文章

  1. js对数组分组处理

    一.js数组分组 1.js对数据分组类似group by 源码如下: <!DOCTYPE html> <html lang="en"> <head&g ...

  2. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

  3. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  4. 转→js数组遍历 千万不要使用for...in...

    看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...

  5. js数组操作大全

    原文(http://www.cnblogs.com/webhotel/archive/2010/12/21/1912732.html) 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简 ...

  6. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  7. PHP 根据key 给二维数组分组

    我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组.先来看以下数组, Array ( [0] => Array ( [id] => 1 ...

  8. js 数组处理函数

    本文转载自有有<js 数组处理函数> concat 将参数列表连接到原数组后面形成一个新的数组并返回,原有数组不受影响. var arr = ["a","b& ...

  9. js 数组赋值问题 :值传递还是引用?

    转载于知乎var a = [1,2,3]; var b = a; a = [4,5,6]; alert(b); //[1,2,3] 面试时被问到这样一个问题,竟然从来没试过... 当时直接的理解,数组 ...

随机推荐

  1. Tomcat简介

    Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器. 如果你学过html,css,你会知道你写的页面只能自己访问,别人不能远程访 ...

  2. Linux入门搭建可视化桌面环境小合集virtual box centOS7.10

    常用命令: 关联主机与虚拟机(方便文件共享): # sudo mount -t vboxsf share(主机文件夹名) /usr/share(虚拟机内自创) Linux shell进入root模式: ...

  3. 从svn下载项目,并在tomcat启动

    1.需要先在本地安装mysql,并且启动成功(配置环境变量.客户端等). 2.需要下载小乌龟,需要从svn上下载项目. 3.安装eclipse,并且在eclipse上下载项目,会下载成两个聚合项目,不 ...

  4. Java学习之Servlet篇

    <JAVA遇见HTML——Servlet篇> Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命 ...

  5. Alienware 15 R3 装Ubuntu 和 win10 双系统

    一.安装环境 Alienware 15 R3 win10 专业版64位 ubuntu16.04 二.软件下载 1.Ubuntu16.04 下载地址:https://www.ubuntu.com/dow ...

  6. 修改centos 7 系统时间

    查看当前系统时间 date 修改当前系统时间 date -s "2018-2-22 19:10:30 查看硬件时间 hwclock --show 修改硬件时间 hwclock --set - ...

  7. css实现纯文字内容元素透明背景(兼容IE6)

    HTML: <div class="title-wrapper"> <span class="title"> <span clas ...

  8. 微信开放平台创建android应用时怎么获取应用签名

    之前微信开放平台中申请创建应用,没有整理,过了好久,又重新百度,今天索性整理了,以供童鞋们备用. 1.微信开发平台注册申请成开发者账号,就此略过 2.在管理中心选择创建移动应用.按照严格要求填写.上传 ...

  9. 【Eclipse】添加builder实现NDK的自动编译

    最近在做NDK相关的东西,Eclipse里面java的自动编译很方便,每次改动后就能自己编译显示错误,而NDK的C/C++文件就需要保存后再手动点build. 研究了下发现java code的自动编译 ...

  10. mysql主从复制总结

    第一步:开启所有MYSQL服务器的BIN日志,每台服务器设置一个唯一的server-id的值(默认是1,一般取IP最后一段) 修改主服务器(master)的my.cnf [mysqld] log-bi ...