Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线sortBy、groupBy和分组数组计数_Javascript_Arrays_Underscore.js - Fatal编程技术网

Javascript 下划线sortBy、groupBy和分组数组计数

Javascript 下划线sortBy、groupBy和分组数组计数,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我在使用下划线操作对象数组时遇到了一些问题。我就快到了,但我一直在尝试在下划线链中组合countBy 我有以下对象数组(简化): 我的目标是只返回每个线程中的最新消息(由messageHeaderId标识),以及线程中作为新对象数组的消息数 因此,从上面的数组中,这将生成一个由2个对象组成的数组,该数组在groupBy方法之后具有每个组中消息数的count属性,并作为属性添加到返回的最新消息中 这是我用来对数组进行排序和分组的方法(我不确定使用2个map函数是否是一个好主意(?),但这是我成功做

我在使用下划线操作对象数组时遇到了一些问题。我就快到了,但我一直在尝试在下划线链中组合countBy

我有以下对象数组(简化):

我的目标是只返回每个线程中的最新消息(由messageHeaderId标识),以及线程中作为新对象数组的消息数

因此,从上面的数组中,这将生成一个由2个对象组成的数组,该数组在groupBy方法之后具有每个组中消息数的count属性,并作为属性添加到返回的最新消息中

这是我用来对数组进行排序和分组的方法(我不确定使用2个map函数是否是一个好主意(?),但这是我成功做到这一点的唯一方法):

这会将线程中的最新消息作为新的对象数组提供给我,而我只是缺少count属性。我尝试了各种u.countBy的组合,只是不知道如何将其放入返回的数组中


我在这里用上面的代码创建了一个jsfiddle:

您需要在
groupBy
之后,但在第一个
映射完成之前设置计数,因为在该映射中您只返回一条记录

我修改了小提琴:

以下是相关的变化:

var selectedMessages = _.chain(messages)
    .sortBy('dateOfMessage')
    .reverse()
    .groupBy('messageHeaderId')
    .map(function(a) {
        // since returning only a[0], assign a new property 'count' with the size of the array
        a[0]['count'] = _.size(a);
        return a[0];
    })
    .map(function(b){...})
    .value();

您需要在
groupBy
之后,但在第一个
映射完成之前设置计数,因为在该映射中,您只返回一条记录

我修改了小提琴:

以下是相关的变化:

var selectedMessages = _.chain(messages)
    .sortBy('dateOfMessage')
    .reverse()
    .groupBy('messageHeaderId')
    .map(function(a) {
        // since returning only a[0], assign a new property 'count' with the size of the array
        a[0]['count'] = _.size(a);
        return a[0];
    })
    .map(function(b){...})
    .value();
var selectedMessages = _.chain(messages)
    .sortBy('dateOfMessage')
    .reverse()
    .groupBy('messageHeaderId')
    .map(function(a) {
        // since returning only a[0], assign a new property 'count' with the size of the array
        a[0]['count'] = _.size(a);
        return a[0];
    })
    .map(function(b){...})
    .value();