我有以下内容:
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)
a
和 b
在 .sort
是字符串。如果将两个字符串与 <
进行比较, 它们按字母顺序进行比较。
关于javascript - 如何使用 _.filter 按名称和排名排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597893/