2011-11-14 12 views
3

JavaScriptオブジェクトのパラメータの名前を変更することはできますか?JavaScript(JQuery)のパラメータ名の変更

私の質問は、JQueryオートコンプリートがパラメータ名について非常に難解で、ラベル名または値のいずれかのパラメータ名が必要であるということから発生します。

マイデータオブジェクトです。

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

これは唯一の方法です。新しいものを作成せずにオリジナルを削除せずにプロパティを再マップすることはできません。 –

関連する問題