【问题标题】:How to overload comparator to sort with UTF-8 and different locales如何重载比较器以使用 UTF-8 和不同的语言环境进行排序
【发布时间】:2016-12-20 12:13:26
【问题描述】:

我有一组数据:

["Alphabet","Zend","Ćwiczenia"]      

结果collection.sort 我得到:["Alphabet","Zend","Ćwiczenia"]

如何重载 comparator 以使用 UTF-8 和不同语言环境进行排序?

【问题讨论】:

    标签: javascript sorting backbone.js utf-8 locale


    【解决方案1】:

    您需要在您的集合上设置一个comparator method,使用localeCompare 作为其排序功能。

    假设你的收藏看起来像

    var c = new C([
        {name: "Alphabet"},
        {name: "Zend"},
        {name: "Ćwiczenia"}
    ]);
    

    看起来像

    var C = Backbone.Collection.extend({
        comparator: function(a, b) {
            return a.get('name').localeCompare(b.get('name'));
        }
    });
    

    还有一个演示

    var C = Backbone.Collection.extend({
        comparator: function(a, b) {
            return a.get('name').localeCompare(b.get('name'));
        }
    });
    
    var c = new C([
        {name: "Alphabet"},
        {name: "Zend"},
        {name: "Ćwiczenia"}
    ]);
    console.log(c.pluck('name'))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.3/backbone-min.js"></script>

    【讨论】:

    • 伟大的作品。但是还有其他问题。默认比较器的排序时间为 0,5s ,但您的比较器约为 4s。它是加快进程的一种方法?
    • 您必须了解如何在 JS 中加快语言环境排序。 stackoverflow.com/questions/14677060/… 可以让你开始
    • @ThePrzemyslaw94 我建议您在定义 Backbone.Collection 之前定义 Collator。类似:var collator = new Intl.Collator(navigator.language, { sensitivity: 'base' })。然后在你的比较器函数中你会做:return collator.compare(a.get('name'), b.get('name'))
    • @idbehold,@nikoshr --首先感谢帮助我。我尝试了这种方法,但比较将我的选择放在冰上超过 4 秒并且页面不起作用。也许是一种异步排序的方法?
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 2017-04-19
    • 2016-02-16
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多