在Immutable.js中的GroupBy然后返回分组List的第一个值

时间:2018-01-25 14:50:33

标签: javascript immutable.js

Immutable.js中是否有可能groupBy()一个值,比如说id,然后在map()里面基本上取组的第一个值为它添加一个新属性然后返回那个单项?如果没有,是否有人建议如何使这项工作?

    fromJS([  {'id':1, 'x':2},
      {'id':2, 'x':3},
      {'id':2, 'x':4}
    ])
    .groupBy(item => item.get('id'))
    .map(values => {
        let item = values.first();
        return item.merge({
            xs: values.map(d => d.get('x'))
        })
    });
    // expected output as a List() - 
      [
       {'id':1, 'x':2, 'xs': [2]},
       {'id':2, 'x':3, 'xs': [3, 4]}
      ]

1 个答案:

答案 0 :(得分:1)

是的,您可以groupBy ID并且您实际上非常接近您想要的解决方案,但错过了.toArray()

var out = Immutable.fromJS([
  {'id':1, 'x':2},
  {'id':2, 'x':3},
  {'id':2, 'x':4}
])
.groupBy(item => item.get('id'))
.map(values => {
  let item = values.first();
  return item.merge({
    xs: values.map(d => d.get('x'))
  });
}).toArray();

console.log(JSON.stringify(out));
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

jsfiddle也可以在这里找到:https://fiddle.jshell.net/rguf75fc/