2013-07-08 25 views
4

我試圖理清我的哈希表按字母順序排列的下拉菜單...使用此功能:JavaScript的排序OBJ改變編號的

function getSortedKeys(obj) { 
    var keys = []; 
    for(var key in obj) { 
     keys.push(obj[key]); 
     keys[keys.length-1]['key'] = key; 
    } 
    return keys.sort(function(a,b){ 
     return a.name > b.name ? 1 : a.name < b.name ? -1 : 0; 
    });   
} 

這個排序下拉菜單......雖然它的變化我的菜單項的原始ID#螺絲一些東西在我的網站...是否有可能保持每個菜單項的原始ID#仍然排序?

sorry..here的哈希碼:

var clientProjectsHash = {}; 
clientProjectsHash['1'] = {}; 
clientProjectsHash['1']['name'] = 'RONA'; 
clientProjectsHash['2'] = {}; 
clientProjectsHash['2']['name'] = 'CMS'; 
clientProjectsHash['3'] = {}; 
clientProjectsHash['3']['name'] = 'ALT'; 

和getSortedKeys被稱爲:

function getInitialClient() { 
    clientProjectsHash = getSortedKeys(clientProjectsHash); 
     for (clientKey in clientProjectsHash) { 
      if(clientKey > 0) { 
       return clientKey; 
      } 
     } 
    } 
+3

這是不應該改變的ID,有沒有更多的代碼? ID是否動態生成? – casraf

+1

你唯一要改變的是這行:'keys [keys.length-1] ['key'] = key;'。這與「身份證」有什麼關係?如果不是,請詳細說明您的問題。 –

+0

你在說什麼「id」? 'obj'看起來像什麼?當你對一個數組進行排序時,這些值可能會以新的鍵結束(因爲它們可能處於新的位置)。 –

回答

0

問題是你正在返回一個數組,並期望它是一個對象。這些在JavaScript中是不同的。沒有什麼是「改變」的;你的「ID」(或「哈希」)沒有被修改。

您的clientProjectsHash最初爲對象!對象是無序的,可以有任何字符串作爲鍵。當你做getSortedKeys(clientProjectsHash);你正在退回陣列!數組是有序的,並且具有從0開始。


clientProjectsHash = getSortedKeys(clientProjectsHash); 
for (clientKey in clientProjectsHash) { 
} 

覆蓋clientProjectsHash陣列數字索引(鍵)。然後你for..in在上面(順便說一句,你應該而不是使用for..in)。

數組從getSortedKeys返回看起來是這樣的:

[ 
    { 
     name: 'ALT', 
     key: 3 
    }, 
    { 
     name: 'CMS', 
     key: 2 
    }, 
    { 
     name: 'RONA', 
     key: 1 
    } 
] 

因此,在你for..inclientKey012。數組的索引。您的key值是而不是更改,您只是讀取錯誤的值。

試試這個:

function getInitialClient() { 
    var clientKeys = getSortedKeys(clientProjectsHash); 
    for(var i = 0, len = clientKeys.length; i < len; i++){ 
     var clientKey = clientKeys[i]; 
     if(clientKey.key > 0){ 
      return clientKey.key; 
     } 
    } 
} 
+0

嘗試那現在id是空的......仍然沒有工作;( – rubberchicken

+0

@rubberchicken:你是什麼意思「id是空的」?什麼id?你想要訪問什麼?你想要做什麼?我還沒有想知道你的問題是什麼,也許我從'getInitialClient'返回了錯誤的值,我改變了它,所以它返回ID,試試嗎? –

+0

它現在不排序..我添加了圖片來主編輯爲你看 – rubberchicken