2011-07-10 26 views
2

是否有人知道如何將電話問題從iOS解放到JavaScript的聯繫人數據進行排序。目前的訂單與按字母順序排序無關。我想按姓氏排序。ios上的Phonegap聯繫排序順序

這是我的聯繫代碼:

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!'); 
}; 

回答

5

您可以通過手在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); 
    ... 
}; 
+0

我不能得到那份工作。我把console.log(aName +''+ bName)放在sort函數中,並獲取undefined undefined undefined undefined out意味着a.firstName等無效。事實上,我剛剛檢查過,它是familyName和givenName,已更改,但仍然無效。有任何想法嗎? – Rich

+0

好吧,算了一下,它需要是a.name.familyName等,但仍然不排序 – Rich

+0

行,修好了,非常感謝那個伴侶,這太棒了! – Rich

0

在JS

功能sortByitemName分選(A,B){ VAR X = a.displayName.toLowerCase(); var y = b.displayName.toLowerCase(); return((x < y)-1:((x> y)?1:0)); }

function onSuccess(contacts) { 

contacts.sort(sortByitemName); 

} 
1

更多的樂趣和更清潔的代碼,你可以考慮使用lodash

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

我使用這種方法,這是更爲有效的(相對於公認的答案)

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. 無論情況如何,以相同字母開頭的所有名稱都將被組合在一起。 (你也可以試試看)。