Lodash分组依据

洛伦佐·马丁(Lorenzo Martin)

我需要的是按项目分组,对于每个项目,我都按照这些项目中的故事进行分组,对于每个故事,我都展示任务。在执行示例时,我们将看到未显示与“ barney”项目相对应的历史记录41。它对故事进行分组,但不显示与未分组的仓库相对应的历史。这是外观的一个例子

 [
  {
    "proyecto": "barney",
    "historia": 42,
    "tarea": [
      "dog",
      "lion",
      "cat"
    ],
    "historia": 41,
    "tarea": [
      "cat"
    ]
  },
  {
    "proyecto": "fred",
    "historia": 35,
    "tarea": [
      "dog",
      "goldfish"
    ]
  }
]

group();

function group()
{

var characters = [
  { 'proyecto': 'barney', 'historia': 42,  'tarea': 'dog' },
  { 'proyecto': 'barney', 'historia': 42,  'tarea': 'lion' },
  { 'proyecto': 'fred',   'historia': 35,  'tarea': 'dog' },
  { 'proyecto': 'barney', 'historia': 41,  'tarea': 'cat' },
  { 'proyecto': 'fred',   'historia': 35,  'tarea': 'goldfish' }
];

var result=_.chain(characters).groupBy("proyecto").map(function(v, i) {
  return {
    proyecto: i,
    historia: _.get(_.find(v, 'historia'), 'historia'),
    tarea: _.map(v, 'tarea')
  }
}).value();
document.body.innerHTML = '<pre>' + JSON.stringify(result, null, '  ') + '</pre>';
	
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

阿克里翁

既然您已经有了lodash答案,那么这里是通过单个ES6实现的方法,Array.reduce因此您必须进行比较:

var data = [ { 'proyecto': 'barney', 'historia': 42, 'tarea': 'dog' }, { 'proyecto': 'barney', 'historia': 42, 'tarea': 'lion' }, { 'proyecto': 'fred', 'historia': 35, 'tarea': 'dog' }, { 'proyecto': 'barney', 'historia': 41, 'tarea': 'cat' }, { 'proyecto': 'fred', 'historia': 35, 'tarea': 'goldfish' } ];

const result = data.reduce((r, {proyecto, historia, tarea}) => {
  r[proyecto] = r[proyecto] || {proyecto, historia: [], tarea: []}
  r[proyecto].historia.push(historia)
  r[proyecto].tarea.push(tarea)
  return r
}, {})

console.log(Object.values(result))

由于您正在使用,reduce因此不需要第二个_.map循环,所有操作都可以合而为一"shot"

如果有ES6问题,这里的实现与_.reduce以下方法相同

var data = [ { 'proyecto': 'barney', 'historia': 42, 'tarea': 'dog' }, { 'proyecto': 'barney', 'historia': 42, 'tarea': 'lion' }, { 'proyecto': 'fred', 'historia': 35, 'tarea': 'dog' }, { 'proyecto': 'barney', 'historia': 41, 'tarea': 'cat' }, { 'proyecto': 'fred', 'historia': 35, 'tarea': 'goldfish' } ];

const result = _.reduce(data, function(r,c) {
  r[c.proyecto] = r[c.proyecto] || {proyecto: c.proyecto, historia: [], tarea: []}
  r[c.proyecto].tarea.push(c.tarea)
  r[c.proyecto].historia.push(c.historia)
  return r
}, {})

console.log(_.values(result))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章