博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速获取json键值对的key名和快速根据value分组
阅读量:6436 次
发布时间:2019-06-23

本文共 1908 字,大约阅读时间需要 6 分钟。

最近项目中后台给返回的数据很复杂,需要各种遍历,组合,其中Object.keys(obj)和通过封装的groupBy这两个方法带给了我极大的便利

Object.keys(obj)

/* Array 对象 */ let arr = ["a", "b", "c"];console.log(Object.keys(arr)); // ['0', '1', '2']/* Object 对象 */ let obj = { foo: "bar", baz: 42 }, console.log(Object.keys(obj));// ["foo","baz"]/* 类数组 对象 */ let obj = { 0 : "a", 1 : "b", 2 : "c"};console.log(Object.keys(obj)); // ['0', '1', '2']

groupBy方法以及用到的reduce详解

Array.prototype.groupBy = function(prop) {  return this.reduce(function(groups, item) {    var val = item[prop];    groups[val] = groups[val] || [];    groups[val].push(item);    return groups;  }, {});}var myList = [  {time: '12:00', location: 'mall'    },  {time: '9:00',  location: 'store'   },  {time: '9:00',  location: 'mall'    },  {time: '12:00', location: 'store'   },  {time: '12:00', location: 'market'  },];var byTime = myList.groupBy('time');byTime = {    '9:00': [      {time: '9:00',  location: 'store' },      {time: '9:00',  location: 'mall'  },    ],    '12:00': [      {time: '12:00', location: 'mall'  },      {time: '12:00', location: 'store' },      {time: '12:00', location: 'market'}    ]}

reduce

var total = [0, 1, 2, 3].reduce(function(sum, value) {  return sum + value;}, 0);// total is 6var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {  return a.concat(b);}, []);// flattened is [0, 1, 2, 3, 4, 5]

参数

callback

执行数组中每个值的函数,包含四个参数:

accumulator累加器累加回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(如下所示)。currentValue数组中正在处理的元素。currentIndex数组中正在处理的当前元素的索引。如果提供了initialValue,则索引号为0,否则为索引为1。array调用reduce的数组

initialValue

[可选] 用作第一个调用 callback的第一个参数的值。如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。

Array.prototype.groupBy = function(prop) {  return this.reduce(function(groups, item) {    var val = item[prop];    // 取出time 例如 9:00    groups[val] = groups[val] || [];  // 每一次取出groups中的9:00对象,如果存在(覆盖一次),如果是12:00对象则赋值新数组    groups[val].push(item);    return groups;  }, {});}

转载地址:http://tohga.baihongyu.com/

你可能感兴趣的文章
CCNP学习笔记15-RSTP
查看>>
DELL服务器iDRAC相关设置
查看>>
JVM学习笔记(一)------基本结构
查看>>
$@等特定shell变量的含义
查看>>
我的友情链接
查看>>
(超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
查看>>
策略模式、上下文与内部类的思考
查看>>
关于getCurrentUrl的获取问题
查看>>
VS2017 installed in a different location
查看>>
java-io之RandomAccessFile
查看>>
return & print
查看>>
css工作笔记
查看>>
PHP客户端缓存控制
查看>>
微信小程序出现【需要进行身份验证】弹框解决方法
查看>>
利用Scala特征(trait)的堆叠操作特性进行切面编程
查看>>
【文件系统】删除文件名中含有空格的文件
查看>>
SOAP协议 访问Webservice
查看>>
在xml文件的Preference标签中,用<extra>给<intent>标签加参数
查看>>
【读书笔记】编写高质量的代码Web前端开发修炼之道——曹刘阳
查看>>
YII2操作mongodb笔记
查看>>