资讯专栏INFORMATION COLUMN

快速获取json键值对的key名和快速根据value分组

qieangel2013 / 2064人阅读

摘要:数组中正在处理的元素。调用的数组可选用作第一个调用的第一个参数的值。在没有初始值的空数组上调用将报错。取出例如每一次取出中的对象,如果存在覆盖一次,如果是对象则赋值新数组

最近项目中后台给返回的数据很复杂,需要各种遍历,组合,其中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 6

var 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;
  }, {});
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107147.html

相关文章

  • MongoDB优化之倒排索引

    摘要:简单地说,倒排索引就是把与对调之后的索引,构建倒排索引的目的是提升搜索性能。本文将介绍中两种构建倒排索引的方法与。 摘要: 为MongoDB中的数据构建倒排索引(Inverted Index),然后缓存到内存中,可以大幅提升搜索性能。本文将通过为电影数据构建演员索引,介绍两种构建倒排索引的方法:MapReduce和Aggregation Pipeline。 GitHub地址: 作者:...

    Nino 评论0 收藏0
  • 深入理解HashMap(一): 从源头说起

    摘要:前言系列文章目录我们都不陌生也是面试几乎必问的考点本系列我们来深入思考有关的设计思想和实现细节解决了什么问题任何数据结构的产生总对应着要解决一个实际的问题的产生要解决问题就是如何有效的存取一组键值对键值对是最常使用的数据形式如何有效地存 前言 系列文章目录 HashMap我们都不陌生, 也是java面试几乎必问的考点, 本系列我们来深入思考有关HashMap的设计思想和实现细节. Ha...

    Cristic 评论0 收藏0
  • es6 Map和set

    摘要:返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。该数组中的每一项也必须是数组,内部数组的首个项会作为键,第二项则为对应值。返回所有成员的遍历器需要特别注意的是,的遍历顺序就是插入顺序。 Js大部分历史时期都只存在一种集合类型,也就是数组类型。数组在 JS 中的使用正如其他语言的数组一样,但缺少更多类型的集合导致数组也经常被当作队列与栈来使用。数组只使用了数值型的索引,而...

    superPershing 评论0 收藏0
  • 彻底弄懂ES6中Map和Set

    摘要:构造函数可以接受一个数组作为参数。本身是一个构造函数,用来生成数据结构。实例对象的属性返回实例的成员总数。返回一个布尔值,表示该值是否为的成员。清除所有成员,没有返回值。返回键值对的遍历器。使用回调函数遍历每个成员。Map Map对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。构造函数Map可以接受一个数组作为参数。 Map和Object的区别 一个Object 的键...

    赵春朋 评论0 收藏0
  • es6学习之map和set

    摘要:和定义一组键值对的集合它是一组键值对的数据结构,由于之前的键必须是字符串。 Map和Set Map 定义:一组键值对的集合 它是一组键值对的数据结构,由于之前javascript的键(key)必须是字符串。为了使键可以是多种类型的于是在最新的es6中引入了map这种数据结构,这样可以加快查询速度,类似于查字典 方法和属性 var m = map() //空map m.set(学生年龄,...

    lvzishen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<