如何对rxjs中的现有流进行排序?

玩具

我是RxJ的新手。我有一个从ajax获取数据的响应流。另外,我还有另一个按钮可以排序。我可以毫无问题地进行排序。我的问题是我是否可以正确排序和更新?实际上,我正在做的只是清空子节点并追加新结果。

(function($, _) {
  var fetchRepoButton = $('.fetch');
  var sortByButton = $('.sort-by');

  var fetchRepoClickStream = Rx.Observable.fromEvent(fetchRepoButton, 'click');

  var sortByClickStream = Rx.Observable.fromEvent(sortByButton, 'click');

  var requestStream = fetchRepoClickStream.map(function() {
    return '/api';
  });

  var responseStream = requestStream.flatMap(function (requestUrl) {
    return Rx.Observable.fromPromise($.getJSON(requestUrl));
  });

  responseStream.subscribe(function (es) {
    var repositories = $('.container');
    repositories.empty();
    var names = es.map(function (e) {
      return {name: e.name};
    }).forEach(function (e) {
      var rep = $('<div>');
      rep.html(e.name);
      repositories.append(rep);
    });

  });

  var sortByStream = sortByClickStream.combineLatest(responseStream, function (click, es) {
    return _.sortBy(es, function(e) {
      return e.count;
    }).reverse().map(function (e) {
      return {name: e.name, count: e.count};
    });
  });

  sortByStream.subscribe(function(es) {
    var repositories = $('.container');
    repositories.empty();
    var names = es.map(function (e) {
      return {name: e.name};
    }).forEach(function (e) {
      var rep = $('<div>');
      rep.html(e.name);
      repositories.append(e);
    });
  });


})($, _);

我正在玩代码。因此,可能会有重复。

int3h

您的代码没有什么不妥,RxJS的用法看起来也不错,尽管您的DOM用法没有得到尽可能优化的优化。创建/删除所有这些DOM元素是一个相对昂贵的过程,因此理想情况下,您希望在可能的情况下恢复元素。您的排序代码似乎已经成熟,可以在这方面进行优化。

对列表进行排序时,您会知道每个元素都已经存在DOM元素。与其删除所有detach()元素,然后以正确的顺序重新创建它们,我将使用从页面中删除该元素并返回它,然后再使用container.append(element)以正确的顺序添加它们。

如果要实现它,我会做类似rep.data('listCount', e.count)最初创建该元素时的操作,因此我们可以直接对jQuery元素进行排序,然后对列表进行排序:

sortByClickStream.subscribe(function() {
  var container = $('.container');

  // `.children()` returns raw DOM elements, so wrap each in jQuery
  _.map(container.children(), function(el) { return $(el); })
    .sortBy(function(item) { return item.data('listCount'); })
    .reverse()
    .forEach(function(item) {
      item.detach();
      container.append(item);
    });
});

可以对响应流列表执行类似的操作,但是需要做更多的工作,因为您不能保证最新列表中的每个元素都已经有一个元素。

总体而言,您所拥有的将可以正常工作,并且对于中小型列表应该足够快。如果您的预期列表大小似乎不那么理想,那么我将开始优化DOM代码。诸如Angular之类的框架具有专用于“ DOM差异”的整个库,以找出为更新内容而修改DOM所需的最少更改。如果您要进行大量此类内容更新,那么我会考虑使用内置此功能的库/框架。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Scala中按值对现有地图进行排序

来自分类Dev

如何在Node.js中对流进行Gunzip?

来自分类Dev

如何在Node.js中对流进行Gunzip?

来自分类Dev

练习面试,对无限字符流进行排序

来自分类Dev

如何根据手动添加的类别或它们所在的文件夹对嵌入中的现有bot命令进行排序?

来自分类Dev

如何按2个列名对数据流进行排序(列号可能会有所不同)?

来自分类Dev

如何按列表中的现有状态排序

来自分类Dev

如何使用队列对整数流进行排序?实验室JAVA

来自分类Dev

如何使用 jq 按字段值对 json 对象流进行排序

来自分类Dev

如何使用 Flink SQL 按事件时间对流进行排序

来自分类Dev

在Node.js中写入文件之前对数据流进行排序

来自分类Dev

在 RxJs 中订阅现有的 observable

来自分类Dev

通过字符串中的数字对现有数据库进行排序

来自分类Dev

按多列对数据库中的现有用户进行排序

来自分类Dev

通过字符串中的数字对现有数据库进行排序

来自分类Dev

使用RxJS事件流进行简单的序列管理

来自分类Dev

我应该如何对流进行汇总?

来自分类Dev

如何对HTTP实时流进行压力测试

来自分类Dev

使用比较器接口和Java 8流进行排序

来自分类Dev

对 N 个数据流进行时间排序的算法

来自分类Dev

如何在Java8中强制对流进行即时评估

来自分类Dev

如何与Node.js进程中的C ++程序输入流进行交互?

来自分类Dev

如何与Node.js进程中的C ++程序输入流进行交互?

来自分类Dev

我该如何对node.js中的文件流进行单元测试?

来自分类Dev

如何在JavaScript中对带有负数的表格进行排序

来自分类Dev

使用现有关联对创建进行排序

来自分类Dev

打开CSV,对特定列进行排序并覆盖现有CSV

来自分类Dev

如何从现有模板进行大量发送

来自分类Dev

如何在AWS Redshift中向现有表添加排序键

Related 相关文章

  1. 1

    在Scala中按值对现有地图进行排序

  2. 2

    如何在Node.js中对流进行Gunzip?

  3. 3

    如何在Node.js中对流进行Gunzip?

  4. 4

    练习面试,对无限字符流进行排序

  5. 5

    如何根据手动添加的类别或它们所在的文件夹对嵌入中的现有bot命令进行排序?

  6. 6

    如何按2个列名对数据流进行排序(列号可能会有所不同)?

  7. 7

    如何按列表中的现有状态排序

  8. 8

    如何使用队列对整数流进行排序?实验室JAVA

  9. 9

    如何使用 jq 按字段值对 json 对象流进行排序

  10. 10

    如何使用 Flink SQL 按事件时间对流进行排序

  11. 11

    在Node.js中写入文件之前对数据流进行排序

  12. 12

    在 RxJs 中订阅现有的 observable

  13. 13

    通过字符串中的数字对现有数据库进行排序

  14. 14

    按多列对数据库中的现有用户进行排序

  15. 15

    通过字符串中的数字对现有数据库进行排序

  16. 16

    使用RxJS事件流进行简单的序列管理

  17. 17

    我应该如何对流进行汇总?

  18. 18

    如何对HTTP实时流进行压力测试

  19. 19

    使用比较器接口和Java 8流进行排序

  20. 20

    对 N 个数据流进行时间排序的算法

  21. 21

    如何在Java8中强制对流进行即时评估

  22. 22

    如何与Node.js进程中的C ++程序输入流进行交互?

  23. 23

    如何与Node.js进程中的C ++程序输入流进行交互?

  24. 24

    我该如何对node.js中的文件流进行单元测试?

  25. 25

    如何在JavaScript中对带有负数的表格进行排序

  26. 26

    使用现有关联对创建进行排序

  27. 27

    打开CSV,对特定列进行排序并覆盖现有CSV

  28. 28

    如何从现有模板进行大量发送

  29. 29

    如何在AWS Redshift中向现有表添加排序键

热门标签

归档