使用 map 和 reduce 获取对象数组

乔·萨德

我有一个数组

var c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}];

我想使用 reduce 方法和 map 来获得以下结果:

result = [
    { name: "John", occurence: 2 },
    { name: "Tom", occurence: 1 }
  ]

这是我尝试过但仍然没有完全得到它的尝试。https://jsfiddle.net/joeSaad/up3ddfzz/

c = [{
  name: 'John'
}, {
  name: 'John'
}, {
  name: 'Simon'
}];

var d = c.reduce((countMap, word) => {
  countMap[word.name] = ++countMap[word.name] || 1;
  return countMap
}, []);

var e = c.reduce((countMap, word) => {
  q = [];
  countMap[word.name] = ++countMap[word.name] || 1;
  var p = {
    name: word.name,
    occurence: countMap[word.name]
  }
  q.push(p);
  return q
}, []);

console.log(e);

非常感谢帮助。提前致谢

谢谢

您肯定在使用 reduce 的正确轨道上,但我会将计算分为两个不同的步骤

let c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}];

const pairs = o=> Object.keys(o).map(k=> [k, o[k]])

let count = c.reduce((acc, {name}) => {
  if (acc[name] === undefined)
    return Object.assign(acc, { [name]: 1 })
  else
    return Object.assign(acc, { [name]: acc[name] + 1 })
}, {})

var result = pairs(count).map(([name, occurences]) => ({name, occurences}))

console.log(result)
//=> [ { name: 'John', occurences: 2 }, { name: 'Tom', occurences: 1 } ]


您可以将这些行为抽象为这样的不同功能

// convert an object to [[key,value]] pairs
const pairs = o=> Object.keys(o).map(k=> [k, o[k]])

// count unique instances of a property value in an array of objects
const countBy = (prop, xs)=> {
  return xs.reduce((acc, x)=> {
    let y = x[prop]
    if (acc[y] === undefined)
      return Object.assign(acc, { [y]: 1 })
    else
      return Object.assign(acc, { [y]: acc[y] + 1 })
  }, {})
}

// your data
let c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}]

// then chain it all together
let result = pairs(countBy('name', c)).map(([name, occurences]) => ({name, occurences}))

console.log(result)
//=> [ { name: 'John', occurences: 2 }, { name: 'Tom', occurences: 1 } ]


ES6 还提供了Map非常适合进行此类计算的功能。

这段代码对我来说读起来更好一些,并且在语义上更正确一些。我们之前的代码做了完全相同的事情,只是它使用了一个普通对象。Map是专门为这些key->value数据设计的数据结构,因此让 Map 成为更好的选择。

唯一的问题是,如果您的代码库还没有以某种方式使用 Maps,那么仅仅为此引入它们可能是错误的举动。

// convert a Map to an array of pairs
const mpairs = m=> [...m.entries()]

// countBy this time uses Map
const countBy = (prop, xs)=> {
  return xs.reduce((m, x)=> {
    let y = x[prop]
    if (m.has(y))
      return m.set(y, m.get(y) + 1)
    else
      return m.set(y, 1)
  }, new Map)
}

// your data
let c = [{name: 'John'}, {name: 'John'}, {name: 'Tom'}]

// then chain it all together
let result = mpairs(countBy('name', c)).map(([name, occurences]) => ({name, occurences}))

console.log(result)
//=> [ { name: 'John', occurences: 2 }, { name: 'Tom', occurences: 1 } ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 map 和 reduce 转换数组

来自分类Dev

使用first last和map实现reduce

来自分类Dev

Spark:在 SparkSql 中使用 map 和 reduce

来自分类Dev

在数组数组的map()中使用reduce()

来自分类Dev

Javascript如何使用高阶函数和Map / Reduce函数求和多个数组

来自分类Dev

使用filter,reduce,add,map从多个词典中获取和评估数据

来自分类Dev

如何使用 http subscribe 和 rxjs map 来获取两个对象数组

来自分类Dev

一起使用Spark和Map-Reduce

来自分类Dev

js 平面数组嵌套在 map() 和 reduce()

来自分类Dev

删除reduce和map中的一个属性(数组)?

来自分类Dev

使用map reduce实施小组

来自分类Dev

使用UnderscoreJS进行Map Reduce

来自分类Dev

使用reduce fnt代替map

来自分类Dev

使用UnderscoreJS进行Map Reduce

来自分类Dev

使用map / reduce计算总数

来自分类Dev

使用Spark进行连续的逐行处理而不使用map和reduce

来自分类Dev

MongoDB Map Reduce对象字段

来自分类Dev

使用Array.reduce(}合并类似的对象和值

来自分类Dev

快速性能:map()和reduce()与for循环

来自分类Dev

使用hadoop和Java命令执行map-reduce作业之间有什么区别

来自分类Dev

为什么map,foreach和reduce在Symbol.iterator上不使用迭代器功能?

来自分类Dev

如何使用map和reduce减少play框架json读取的样板代码?

来自分类Dev

如何在couchdb和nodejs中使用map / reduce改善视图

来自分类Dev

使用复杂的键和值时,Map-Reduce的减少幅度不如预期

来自分类Dev

使用reduce,map和spread的笛卡尔积将需要展平的结果分组

来自分类Dev

使用map和reduce找出单词中每个字母的值

来自分类Dev

如何在 MongoDB 和 JS 中使用 map-reduce 来获得它?

来自分类Dev

在单个常量中使用 Object.keys()、map()、...Array()、reduce() 和 concat()

来自分类Dev

使用Reduce将数组转换为对象

Related 相关文章

  1. 1

    使用 map 和 reduce 转换数组

  2. 2

    使用first last和map实现reduce

  3. 3

    Spark:在 SparkSql 中使用 map 和 reduce

  4. 4

    在数组数组的map()中使用reduce()

  5. 5

    Javascript如何使用高阶函数和Map / Reduce函数求和多个数组

  6. 6

    使用filter,reduce,add,map从多个词典中获取和评估数据

  7. 7

    如何使用 http subscribe 和 rxjs map 来获取两个对象数组

  8. 8

    一起使用Spark和Map-Reduce

  9. 9

    js 平面数组嵌套在 map() 和 reduce()

  10. 10

    删除reduce和map中的一个属性(数组)?

  11. 11

    使用map reduce实施小组

  12. 12

    使用UnderscoreJS进行Map Reduce

  13. 13

    使用reduce fnt代替map

  14. 14

    使用UnderscoreJS进行Map Reduce

  15. 15

    使用map / reduce计算总数

  16. 16

    使用Spark进行连续的逐行处理而不使用map和reduce

  17. 17

    MongoDB Map Reduce对象字段

  18. 18

    使用Array.reduce(}合并类似的对象和值

  19. 19

    快速性能:map()和reduce()与for循环

  20. 20

    使用hadoop和Java命令执行map-reduce作业之间有什么区别

  21. 21

    为什么map,foreach和reduce在Symbol.iterator上不使用迭代器功能?

  22. 22

    如何使用map和reduce减少play框架json读取的样板代码?

  23. 23

    如何在couchdb和nodejs中使用map / reduce改善视图

  24. 24

    使用复杂的键和值时,Map-Reduce的减少幅度不如预期

  25. 25

    使用reduce,map和spread的笛卡尔积将需要展平的结果分组

  26. 26

    使用map和reduce找出单词中每个字母的值

  27. 27

    如何在 MongoDB 和 JS 中使用 map-reduce 来获得它?

  28. 28

    在单个常量中使用 Object.keys()、map()、...Array()、reduce() 和 concat()

  29. 29

    使用Reduce将数组转换为对象

热门标签

归档