使用javascript对元素列表进行分类/分组和排序的最佳方法是什么?

亚历克斯韦斯特

我有一些属性的元素列表,例如

doc.title = 'some title'
doc.category = 'book'
doc.year = '2016'

其他可能的类别可以是纸张,文章等。

现在,假设有两个按钮“按类别排序”和“按年份排序”。

单击“按类别排序”时,列表应为:

Book
1. book 1
2. book 2

Paper
1. paper 1
2. paper 2

Article
1. article 1
2. article 2

当点击“按年份排序”按钮时

2016
1.
2.
3.

2015
1.
2.

等等。

我想做到这一点,同时保持html页面的尺寸尽可能小。请让我知道完成此操作的最佳方法是什么。

罗伯·M

像这样的东西应该使您入门-该代码带有注释注释(在操作中查看):

// convert array of objects into a Map grouped and ordered by supplied key
function group(items, key) {
    // get unique values for grouping key
    const unique = [
        ...new Set(items.map(item => item[key]))
    ];

    // will be ascending by default
    unique.sort();

    // sorting all of the results by title field
    const sortFn = (a, b) => a.title > b.title;

    const sortItems = (val) => {
        // filters the result set to items sharing the current group field value
        let sorted = items.filter(item => item[key] === val);
        // sort by title
        sorted.sort(sortFn);
        return sorted;
    }

    // reduce to a Map (which preserves insertion order and maintains the group key sorting)
    return unique.reduce((map, cur) => map.set(cur, sortItems(cur)), new Map());
}

// testing it out
data = [{
  title: 'foo',
    category: 'book',
    year: 2016,
}, {
    title: 'bar',
    category: 'book',
    year: 2016,
}, {
    title: 'blah',
    category: 'paper',
    year: 2010,
}, {
    title: 'idk',
    category: 'paper',
    year: 2015,
}]

group(data, 'category'); // Map {"book" => [Object, Object], "paper" => [Object, Object]}
group(data, 'year'); // Map {2010 => [Object], 2015 => [Object], 2016 => [Object, Object]}

为了进行显示,可以使用for...of解构:

for (let [category, items] of group(data, 'category')) {
    console.log(`
       <div class="item">
          <h3>${category}</h3>
          <ol>${items.map(item => `<li>${item.title}</li>`).join('')}</ol>
       </div>
    `);
}

请注意,即使我在整个过程中都使用了ES6,也可以很容易地对其进行重构,以实现向后兼容

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用javascript对元素列表进行分类/分组和排序的最佳方法是什么?

来自分类Dev

在 Pandas 中对数据进行分组和排序的最佳方法是什么?

来自分类Dev

使用Java 8,创建字符串的排序和分组列表的最简洁方法是什么

来自分类Dev

在 Swift 中使用 map 和排序的最佳方法是什么

来自分类Dev

根据姓名对用户性别进行分类的最佳方法是什么?

来自分类Dev

使用CSS或javascript折叠和展开html 4中的列表的最佳方法是什么

来自分类Dev

在C#中,对列表中的连续日期进行分组的最佳方法是什么?

来自分类Dev

使用Lambda对列表进行排序和分组

来自分类Dev

用日期和PHP和Cookie对“最近浏览的页面”进行排序的最佳方法是什么?

来自分类Dev

对对象数组进行分组和排序的最佳方法

来自分类Dev

通过API对未排序和过滤的数据库数据进行分页的最佳方法是什么?

来自分类Dev

进行自定义排序的最佳方法是什么?

来自分类Dev

在JAVA中对TIME数组进行排序的最佳方法是什么

来自分类Dev

分组分组的最佳方法是什么?

来自分类Dev

设置元素的宽度和高度的最佳方法是什么?

来自分类Dev

包装标签和输入元素的最佳方法是什么

来自分类Dev

使用C#对列表<string>进行排序的正确方法是什么?

来自分类Dev

使用Devise 3和Backbone进行用户身份验证的最佳方法是什么?

来自分类Dev

维护和进行安全会话的最佳方法是什么?我目前使用的代码

来自分类Dev

使用Selenium Webdriver和junit5进行端到端测试的最佳方法是什么?

来自分类Dev

使用Devise 3和Backbone进行用户身份验证的最佳方法是什么?

来自分类Dev

使用Firebase进行注册和登录android应用的最佳方法是什么?

来自分类Dev

使用 node 和 angularjs 对用户进行身份验证的最佳方法是什么?

来自分类Dev

从函数返回列表和整数的最佳方法是什么?

来自分类Dev

使用BeautifulSoup和列表从Wikipedia的信息框中提取特定文本的最佳方法是什么?

来自分类Dev

Javascript Facebook登录-进行安全登录的最佳方法是什么?

来自分类Dev

根据已排序的 ArrayList 对 ArrayList 进行排序的最佳方法是什么?

来自分类Dev

在Python列表中查找元素的第一个和最后一个出现的最佳方法是什么?

来自分类Dev

基于两个条件对列表进行排序的最佳算法是什么?

Related 相关文章

  1. 1

    使用javascript对元素列表进行分类/分组和排序的最佳方法是什么?

  2. 2

    在 Pandas 中对数据进行分组和排序的最佳方法是什么?

  3. 3

    使用Java 8,创建字符串的排序和分组列表的最简洁方法是什么

  4. 4

    在 Swift 中使用 map 和排序的最佳方法是什么

  5. 5

    根据姓名对用户性别进行分类的最佳方法是什么?

  6. 6

    使用CSS或javascript折叠和展开html 4中的列表的最佳方法是什么

  7. 7

    在C#中,对列表中的连续日期进行分组的最佳方法是什么?

  8. 8

    使用Lambda对列表进行排序和分组

  9. 9

    用日期和PHP和Cookie对“最近浏览的页面”进行排序的最佳方法是什么?

  10. 10

    对对象数组进行分组和排序的最佳方法

  11. 11

    通过API对未排序和过滤的数据库数据进行分页的最佳方法是什么?

  12. 12

    进行自定义排序的最佳方法是什么?

  13. 13

    在JAVA中对TIME数组进行排序的最佳方法是什么

  14. 14

    分组分组的最佳方法是什么?

  15. 15

    设置元素的宽度和高度的最佳方法是什么?

  16. 16

    包装标签和输入元素的最佳方法是什么

  17. 17

    使用C#对列表<string>进行排序的正确方法是什么?

  18. 18

    使用Devise 3和Backbone进行用户身份验证的最佳方法是什么?

  19. 19

    维护和进行安全会话的最佳方法是什么?我目前使用的代码

  20. 20

    使用Selenium Webdriver和junit5进行端到端测试的最佳方法是什么?

  21. 21

    使用Devise 3和Backbone进行用户身份验证的最佳方法是什么?

  22. 22

    使用Firebase进行注册和登录android应用的最佳方法是什么?

  23. 23

    使用 node 和 angularjs 对用户进行身份验证的最佳方法是什么?

  24. 24

    从函数返回列表和整数的最佳方法是什么?

  25. 25

    使用BeautifulSoup和列表从Wikipedia的信息框中提取特定文本的最佳方法是什么?

  26. 26

    Javascript Facebook登录-进行安全登录的最佳方法是什么?

  27. 27

    根据已排序的 ArrayList 对 ArrayList 进行排序的最佳方法是什么?

  28. 28

    在Python列表中查找元素的第一个和最后一个出现的最佳方法是什么?

  29. 29

    基于两个条件对列表进行排序的最佳算法是什么?

热门标签

归档