javascript - 如何使用 _.filter 按名称和排名排序?

标签 javascript jquery underscore.js

我有以下内容:

Emojis = {
  ':smile:' : { people: true, ranking: 1 },
  ':gring:' : { people: true, ranking: 2 },
  ':wink:' : { people: true, ranking: 3 },
  ':smirk:' : { people: true }
};

EmojiNames = _.keys(Emojis);

EmojiCommon = _.filter(EmojiNames, function (name) {
  if (Emojis[name].people) {
    return name;
  } else {
    return false;
  }
});

现在,我有 EmojiCommon,返回匹配 name == "people"的项目,我怎样才能让 EmojiCommon 函数也按排名过滤。项目 1 在哪里排在第一位,没有排名的任何项目都低于所有有排名的项目?

最佳答案

您必须添加一个额外的步骤来排序。这首先按级别排序,然后按名称排序。您可以反转 || 的参数按名称排序,然后按级别排序。

Emojis = {
  ':wink:' : { people: true, ranking: 3 },
  ':gring:' : { people: true, ranking: 2 },
  ':smirk:' : { people: true },
  ':smile:' : { people: true, ranking: 1 }
};

EmojiNames = _.keys(Emojis);

EmojiCommon = _.filter(EmojiNames, function (name) {
  return Emojis[name].people;
});

EmojiCommon.sort(function(a,b) {
  var rankA = Emojis[a].ranking || Number.MAX_VALUE;
  var rankB = Emojis[b].ranking || Number.MAX_VALUE;
  return (rankA - rankB) || (a > b ? 1 : -1);
});

console.log(EmojiCommon)

ab.sort是字符串。如果将两个字符串与 < 进行比较, 它们按字母顺序进行比较。

关于javascript - 如何使用 _.filter 按名称和排名排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597893/

相关文章:

javascript - 使用 javascript 动态创建 SVG 路径,然后导出为 .pdf

javascript - 如何在 ACE 编辑器中设置缩进大小

javascript - 选择框高度在 chrome 中不起作用

javascript - 如何在 JQuery 中重复相同的代码,并为每个代码附加不同的编号?

javascript - 如何在 jQuery 中切换部分 href?

javascript - jQuery:动画序列图像

javascript - DOM 属性更改时触发事件

javascript - 使用 Backbone 为模板添加下划线

javascript - 内置原型(prototype)函数,如 Array.map、Array.filter VS _.map、_.filter

javascript - underscore.js 如何为函数创建别名?