1

キーと値のペアを持つマップのタイプとして使用する JavaScript オブジェクトがあります。

controller から値が注入されると、このマップの作成が行われます。

var people = {"2":"Brad","3":"Antonio","5":"Stacy","6":"Marry","1":"Jim"}

新しいオブジェクトを作成したいのですが、もう 1 つのエントリ、つまり疑似コードで

var new_people = people + {11: "John"}

私は最初に人々を新しい人々にコピーしようとしました:

new_people.\"11\" = "John"

new_people."11" = "John"

どちらも失敗します。数値の代わりに任意の文字列が機能しますが、つまり

new_people.anystring = "John"

var new_people = {"2":"Brad","3":"Antonio","5":"Stacy","6":"Marry","1":"Jim", "anystring":"John"}
4

4 に答える 4

2

オブジェクトを格納するときに変数が参照を保持するため、問題が発生します。new_peopleを変更することで、人も変更することになります。

var people = {"1":"James"}
console.log(people);       // Object {1: "James"}
var new_people = people;
new_people["2"] = "Jimmy";
console.log(people);       // Object {1: "James", 2: "Jimmy"}
console.log(new_people);   // Object {1: "James", 2: "Jimmy"}

最初にオブジェクトのクローンを作成してから、元のオブジェクトに影響を与えないようにクローンを変更する必要があります。

これを行う簡単な方法の1つは、次のようなunderscore.js extend()メソッドを使用することです。

var new_people = _.extend({}, people, {"2": "Jimmy"});
console.log(people);       // Object {1: "James"}
console.log(new_people);   // Object {1: "James", 2: "Jimmy"}

または同様に、次のようなjQuery extend()を使用します。

var new_people = $.extend({}, people, {"2": "Jimmy"});
console.log(people);       // Object {1: "James"}
console.log(new_people);   // Object {1: "James", 2: "Jimmy"}
于 2013-03-22T13:32:28.117 に答える
2

オブジェクトにキー値を追加するだけです。

people['11'] = "John";

キーが有効な識別子名 (数字ではない) である場合は、次のように使用できます。

people.key = "John";

有効な変数名でない場合は、インデックスを使用する必要があります。

people["~!#$#$#HV"] ="some value";
于 2013-03-22T13:25:27.443 に答える
0

@Gandalf StormCrowここにコードがあります:jsfiddle

var people = {"2":"Brad","3":"Antonio","5":"Stacy","6":"Marry","1":"Jim"};

var newpeople = {"11": "John"};
jQuery.extend(people, newpeople);
//Now: people = {"2":"Brad","3":"Antonio","5":"Stacy","6":"Marry","1":"Jim","11": "John"}

for(var i in people){
  alert(people[i]);  
};
于 2013-03-22T13:59:01.480 に答える