2009-03-05 21 views
110

Tôi có một đối tượng chứa các cảnh báo và một số thông tin về họ:Phụ thêm đến một đối tượng

var alerts = { 
    1: {app:'helloworld','message'}, 
    2: {app:'helloagain',message:'another message'} 
} 

Thêm vào đó, tôi có một biến mà nói có bao nhiêu cảnh báo có, alertNo. Câu hỏi của tôi là, khi tôi đi thêm cảnh báo mới, có cách nào để thêm cảnh báo vào đối tượng alerts không?

+5

Tôi nghĩ rằng bạn có một vấn đề với json viết nào của bạn: 1: {app: 'helloworld', 'thông điệp'} = > 1: {app: 'helloworld', message: 'a message'}? –

Trả lời

189

Làm cách nào để lưu trữ cảnh báo dưới dạng bản ghi trong mảng thay vì thuộc tính của một đối tượng?

var alerts = [ 
    {num : 1, app:'helloworld',message:'message'}, 
    {num : 2, app:'helloagain',message:'another message'} 
] 

Và sau đó để thêm một, chỉ cần sử dụng push:

alerts.push({num : 3, app:'helloagain_again',message:'yet another message'}); 
2

Bạn có đủ khả năng để thay đổi bên ngoài, hầu hết các cấu trúc cho một mảng? Vì vậy, nó sẽ trông như thế này

var alerts = [{"app":"helloworld","message":null},{"app":"helloagain","message":"another message"}]; 

Vì vậy, khi bạn cần phải thêm một, bạn chỉ có thể đẩy nó vào mảng

alerts.push({"app":"goodbyeworld","message":"cya"}); 

Sau đó, bạn có một built-in chỉ số zero-based cho như thế nào lỗi được liệt kê.

3

Bạn thực sự nên đi với mảng cảnh báo đề nghị, nhưng nếu không thêm vào đối tượng mà bạn đề cập sẽ trông như thế này:

alerts[3]={"app":"goodbyeworld","message":"cya"}; 

Nhưng kể từ khi bạn không nên sử dụng số đen như tên trích dẫn tất cả mọi thứ và đi với

alerts['3']={"app":"goodbyeworld","message":"cya"}; 

hoặc bạn có thể biến nó thành một mảng đối tượng.

Tiếp cận nó trông giống như

alerts['1'].app 
=> "helloworld" 
-1

Hãy thử điều này:

alerts.splice(0,0,{"app":"goodbyeworld","message":"cya"}); 

trình khá tốt, nó sẽ thêm nó vào đầu của mảng.

+0

Điều này không hoạt động vì tôi không thể gọi mối nối trên một đối tượng, chỉ trên một mảng. –

53

jQuery $.extend(obj1, obj2) sẽ hợp nhất 2 đối tượng cho bạn, nhưng bạn thực sự nên sử dụng một mảng.

var alertsObj = { 
    1: {app:'helloworld','message'}, 
    2: {app:'helloagain',message:'another message'} 
}; 

var alertArr = [ 
    {app:'helloworld','message'}, 
    {app:'helloagain',message:'another message'} 
]; 

var newAlert = {app:'new',message:'message'}; 

$.extend(alertsObj, newAlert); 
alertArr.push(newAlert); 
+0

Mở rộng của JQuery chậm: http://trevmex.com/post/2531629773/jquerys-extend-is-slow.Ngoài ra, có một lỗi đánh máy. $ .extends() nên đọc $ .extend(). – ken

+0

Bắt tốt với lỗi đánh máy. Có những tình huống mà $ .extends là hữu ích nhưng bạn nói đúng là nó nên tránh khi có thể. – respectTheCode

+1

Tôi cho rằng extend() là ok khi bạn chỉ có một cấu trúc bản ghi, không có dấu ngoặc, cho phần còn lại tôi đồng ý vớiTheCode, chỉ cần sử dụng push() – elvenbyte

-2
alerts.unshift({"app":"goodbyeworld","message":"cya"}); 
+0

Điều này sẽ chỉ khả thi nếu cảnh báo là mảng chứ không phải đối tượng. – tfantina

0

Giống như câu trả lời khác chỉ ra, bạn có thể tìm thấy nó dễ dàng hơn để làm việc với một mảng.

Nếu không:

var alerts = { 
    1: {app:'helloworld',message:'message'}, 
    2: {app:'helloagain',message:'another message'} 
} 

// Get the current size of the object 
size = Object.keys(alerts).length 

//add a new alert 
alerts[size + 1] = {app:'Your new app', message:'your new message'} 

//Result: 
console.log(alerts) 
{ 
    1: {app:'helloworld',message:'message'}, 
    2: {app:'helloagain',message:'another message'} 
    3: {app: "Another hello",message: "Another message"} 
}  

thử nó:

https://jsbin.com/yogimo/edit?js,console

Các vấn đề liên quan