【问题标题】:Phonegap contact sort order on iosios上的Phonegap联系人排序顺序
【发布时间】:2011-07-10 04:17:23
【问题描述】:

有谁知道如何将 phonegap 从 iOS 中解放出来的联系人数据排序到 javascript。目前的顺序与字母排序无关。我想按姓氏排序。

这是我的联系代码:

function init_contacts() {
     var fields = [ "name","phoneNumbers"];
     navigator.service.contacts.find(fields, contactSuccess, contactError, '');
}
function contactSuccess(contacts) {
    for (n = 0; n < contacts.length; n++) {
        if (contacts[n].phoneNumbers) {
            for (m = 0; m < contacts[n].phoneNumbers.length; m++) {
                addToMyContacts(contacts[n].name.formatted, contacts[n].phoneNumbers[m].value);
                console.log('Found ' + contacts[n].name.formatted + ' ' + contacts[n].phoneNumbers[m].value);
            }
        }
}
$("#my_contacts").listview("refresh"); 
};

function contactError() {
    navigator.notification.alerter('contactError!');
};

【问题讨论】:

    标签: ios cordova


    【解决方案1】:

    您可以在 Javascript 中手动进行这种排序。

    var cSort = function(a, b) {
      var aName = a.lastName + ' ' + a.firstName;
      var bName = b.lastName + ' ' + b.firstName;
      return aName < bName ? -1 : (aName == bName ? 0 : 1);
    };
    
    function contactSuccess(contacts) {
      contacts = contacts.sort(cSort);
      ...
    };
    

    【讨论】:

    • 我无法让它工作。我将 console.log(aName + ' ' + bName) 放在排序函数中并得到 undefined undefined undefined undefined out 这意味着 a.firstName 等无效。实际上,我刚刚检查了一下,它的familyName 和givenName 已更改但仍然无法正常工作。有什么想法吗?
    • 好的,解决了这个问题,它需要是 a.name.familyName 等但仍然没有排序
    • 好的,修好了,非常感谢这位朋友,太棒了!
    • 很高兴为您提供帮助!抱歉,我之前无法进行测试(我已经有一段时间没有一起使用 PhoneGap 应用程序了)。享受吧。
    • 哦,是的,记录一下,只要你改成 a.name.familyName 等,代码就完美了,最后一个错误在我的代码中
    【解决方案2】:

    要获得更有趣和更简洁的代码,您可以考虑使用lodash

    contacts = _.sortBy(contacts, ['last_name', 'first_name']);
    

    【讨论】:

      【解决方案3】:

      js中的排序

      函数 sortByitemName(a, b) { var x = a.displayName.toLowerCase(); var y = b.displayName.toLowerCase(); 返回 ((x y) ? 1 : 0)); }

      function onSuccess(contacts) {
      
      contacts.sort(sortByitemName);
      
       }
      

      【讨论】:

        【解决方案4】:

        我正在使用这种方法,效率更高(与接受的答案相比)

        var cSort=function(a,b){ 
                var an=a.name.formatted.toUpperCase();
                var bn=b.name.formatted.toUpperCase();
                return (an<bn)?-1:(an==bn)?0:1;
            };
        
        function contactSuccess(contacts) {
          contacts = contacts.sort(cSort);
          ...
        };
        
        1. Contact.name.formatted 跨平台更加一致
        2. 无论大小写如何,所有以相同字母开头的名称都将被组合在一起。 (你也可以试试看)。

        【讨论】:

          猜你喜欢
          • 2015-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多