簡體   English   中英

向對象添加新屬性

[英]Adding new property to object

我有一個javascript對象,用作具有鍵值對的地圖類型。

當從控制器注入值時,將發生此映射的填充:

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

我想創建一個新的對象,但又有一個條目,即偽代碼

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"}

您可以使用索引:

new_people['11'] = 'John';

您只需要向該對象添加一個鍵值:

people['11'] = "John";

如果密鑰是有效的標識符名稱(而不是數字),則可以使用以下代碼:

people.key = "John";

如果它不是有效的變量名,則必須使用索引:

people["~!#$#$#HV"] ="some value";

您會遇到問題,因為變量在存儲對象時會保留引用。 通過對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"}

您需要先克隆對象,然后再對克隆進行突變,以免影響原始對象。

一種簡單的方法是使用underscore.jsextend ()方法,如下所示:

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"}

@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]);  
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM