lodash-使用_.groupBy创建数组之前对结果进行排序

时间:2018-08-08 21:37:13

标签: angular sorting underscore.js lodash

我正在使用lodash的groupBy按1到10的数字值对对象进行分组。让我们将属性称为“ sort”

groupBy的结果看起来像

Blob(623853) {name: "profile.jpg", size: 623853, type: "image/jpeg"}

接下来,我使用Object.values(result)将其转换回二维数组,以双ngFor角度显示。

问题是我不确定(可以吗?)对象的顺序是否正确。 groupBy是否按最合适的顺序创建密钥?

因此,如果结果看起来像

{
    1:[{sort:1,...}, ...],
    2:[{sort:2,...}], ...].
    ...
}

在将_groupBy结果推入数组之前如何对其进行预排序?

3 个答案:

答案 0 :(得分:0)

我也很难信任JavaScript对象的迭代顺序。我建议您使用lodash的sortBy函数来收集不确定性。

如果我正确解释了您的问题,那么将sortBy应用到result对象(使用_.property iteratee shorthand)应该会为您提供所需的2D数组结构:

this.target_data = _.sortyBy(result, 'sort');

this.target_data成为2D数组:第一行是sort = 1的对象列表,下一行是sort = 2的对象列表,等等。

请参见this快速演示。

答案 1 :(得分:0)

这在_.groupBy方法的文档中已明确定义:

  

创建一个由键组成的对象,这些键由通过iteratee运行collection每个元素的结果生成。 分组值的顺序取决于它们在集合中出现的顺序。每个密钥的对应值是负责生成密钥的元素数组。使用一个参数(值)调用iteratee。

如果要订购这些产品,则需要在_.orderBy之前_.sortBy / _.groupBy

答案 2 :(得分:0)

由于您的键是数字,所以Object.values()将创建一个数组,其值按原始键的数字值排序。

const data = {
    3:3,
    1:1,
    2:2,
};

const result = Object.values(data);

console.log(result);