2011-11-14 57 views
3

是否可以更改JavaScript對象中參數的名稱?JavaScript(JQuery)更改參數的名稱

我的問題是由於JQuery AutoComplete對參數名稱非常挑剔,並且需要一個參數名稱(標籤或值)。

我的數據對象。

data.... 
data.receivers[].id 
data.receivers[].name 
data.... 

我想要做的是做一個別名/參考或類似的概念,像這樣。

data.receivers[].label = data.receivers[].name 

所以我想改變一個參數從名稱到標籤。我這樣做了,但我不喜歡複製我相信.map所做的數據。

var callBack = function(data) { 
    var autoCompleteData = jQuery.map(data.receivers, function(receiver, i){ 
      return {label: receiver.name, id: receiver.id }; 
    }); 

    $("input#reciever").autocomplete({ 
     source: autoCompleteData, 
     focus: function(event, receiver) { 
      $("input#reciever").val(receiver.item.label); 
      return false; 
     }, 
     select: function(event, receiver) { 
      $("input#reciever").val(receiver.item.label); 
      $("input#recieverId").val(receiver.item.id); 
      return false; 
     } 

    }); 
} 

Ps。我可以從我的服務器更改JSON返回數據,但我希望保持名稱的邏輯性和直觀性,並且不會被強制按照JQuery的約束通過數據對象進行建模。

回答

3

如果您想更新就地你的對象集合,你可以使用$.each()代替$.map()

$.each(data.receivers, function() { 
    this.label = this.name; 
    delete this.name;  
}); 

$("input#reciever").autocomplete({ // suggest $("#receiver") instead 
    source: data.receivers, 
    // ... 
}); 
+0

由於這是一個很好的答案。我將不得不考慮這一點。你的代碼是創建一個新的屬性並設置它通過一個循環。我想知道的是在JavaScript中也有概念,什麼是可能的,哪些不是。例如,如果某人可以對屬性進行名稱更改。就像更改引用/指針名稱一樣,不進行任何計算。 – Farmor

+0

據我所知,這是做到這一點的唯一方法:如果不創建新的屬性並刪除原件,則無法重新映射屬性。 –