javascript - Immutable.js 中的 GroupBy,然后返回分组列表的第一个值

标签 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]}
      ]

最佳答案

是的,您可以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/

关于javascript - Immutable.js 中的 GroupBy,然后返回分组列表的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445689/

相关文章:

javascript - 如何在 C# 中单击带有 Selenium 的 JS 链接

javascript - Google Blogger 的编号页面导航在搜索结果页面上不起作用

javascript超大负指数到十进制转换

javascript - 在不可变对象(immutable对象)中添加具有键值对的新对象

reactjs - 当使用 redux 和 immutable-js 时 - 你会在选择器上调用 toJS() 吗?或者您在渲染函数中使用 .get ('prop' )吗?

javascript - ExtJS 3.2 : Grid column header grouping

javascript - 在 Angular.js 中扩展 $scope

php - 在 php 中打开其他 URL 以便在用户完全看到其他内容时打印它(在后台打印)

javascript - ImmutableJS 设置不扁平化

javascript - 不可变 JS - 如何按降序对日期进行排序