按字母顺序对Backbone集合进行排序

13

是否有一种方法可以使用_.sortBy方法或库中的任何其他部分来直接完成这个功能?


7
您的问题提到了Underscore,但您接受了一个来自Backbone的答案。我来到这个页面是因为我实际上正在寻找Underscore的答案,所以这个标题有误导性。请考虑修改标题。 您的问题提到了Underscore,但您接受了一个来自Backbone的答案。我来到这个页面是因为我实际上正在寻找Underscore的答案,所以这个标题有误导性。请考虑修改标题。 - T.W.R. Cole
2个回答

25
你是指像这个这样的吗?
var array = [
    { name: "banana" },
    { name: "carrot" },
    { name: "apple" }
];

var sorted = _(array).sortBy("name");

我觉得它可以直接使用。

如果您想对普通的字符串数组进行排序,您可能只需要使用sort

var flatArray = ["banana", "carrot", "apple"];

flatArray.sort();

这里。同样适用。

请注意,Underscore的sortBy返回一个已排序的数组,而JavaScript内置的sort函数会就地对数组进行排序。


如果您使用大写字母"C"来书写"Carrot",则 _.sortBy() 将无法正常工作。"Carrot"将位于第一个索引位置。http://jsfiddle.net/uHtUX/39/ - Andrej
@Andrej “无法正常工作”?我认为默认的sortBy比较函数遵循标准的字母数字排序是相当合理的(即在您的Web控制台中尝试'a'<'A''A'<'a')。如果您想要不区分大小写的排序,可以提供一个函数来首先调用toLowerCase处理值,就像这样:http://jsfiddle.net/uHtUX/40/。 - Dan Tao
这是一个定义问题。“按字母顺序”通常意味着不区分大小写,就像字典中术语的顺序一样。其他任何情况都不算真正的按字母顺序... - Andrej

10

由于您在问题上打了backbone.js标签,我假设您的意思是要对集合进行排序,您只需要在集合上提供比较函数,backbone将保持集合排序。

如果您的问题是特定的字母顺序排序,我相信这是默认排序方式,来自backbone.js文档(我在上面链接到了它)。

chapters.comparator = function(chapter) {
  return chapter.get("page");
};

1
这正是我所需要的。在你指出它们之前,我在文档中没有遇到过比较器。非常感谢! - Will Hitchcock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接