2017-09-22 37 views
5

Xin lỗi vì vấn đề đơn giản này - nhưng tôi dường như bỏ sót một điều hiển nhiên. Bất kỳ con trỏ nào cũng sẽ là một trợ giúp tuyệt vời.Không thể chèn đối tượng vào mảng đối tượng json

Tôi có một JSON như

var whatever = [{   
"key1" : { "text" : "text1","group" : "1" }, 
"key2" : { "text" : "text2","group" : "2" }, 
"key3" : { "text" : "text3","group" : "3" } 
}]; 

Tôi cố gắng để thêm một đối tượng khác (lúc khởi động tốt nhất) - nhưng chỉ là không thể làm cho nó làm việc.

var str = '{"text":"text0","group":"0"}'; 
var obj = JSON.parse(str); 
whatever[0].put("key0",obj); 

Bắt lỗi dưới đây:

Uncaught TypeError: whatever[0].put is not a function

fiddle

+0

thuộc tính đối tượng không có một trật tự, vì vậy thêm nó "lúc bắt đầu" làm cho không có ý nghĩa . – Jamiec

+0

chỉ là một câu hỏi, tại sao một mảng? –

+0

Lỗi này khá rõ ràng. Đừng coi đây là thô lỗ, nhưng bạn thực sự nên cố gắng hơn để hiểu những gì mà trình thông dịch/trình biên dịch cho bạn biết. Đối với javascript mở một giao diện điều khiển viết 'obj.' cho thấy bạn hoàn thành mà thực sự hữu ích như là một nguồn tài liệu đầu tiên – ilmirons

Trả lời

3

Không có put chức năng trên đối tượng. Sử dụng tài sản thay vì nó. Khi bạn muốn gán cho một thuộc tính không tồn tại, nó sẽ tạo một thuộc tính mới và gán giá trị cho nó.

whatever[0]["key0"] = obj; 

gì có liên quan đến lúc khởi động tốt, không có lệnh cho thuộc tính đối tượng. Đó là một tuyên bố sai. Nếu bạn muốn đặt hàng cố gắng suy nghĩ từ quan điểm của mảng của các đối tượng thay vì mảng của đối tượng, trong đó có các đối tượng.

ví dụ Mã

const whatever = [{   
 
    "key1" : { "text" : "text1","group" : "1" }, 
 
    "key2" : { "text" : "text2","group" : "2" }, 
 
    "key3" : { "text" : "text3","group" : "3" } 
 
}]; 
 

 
const str = '{ "text" : "text0", "group" : "0" }'; 
 
const obj = JSON.parse(str); 
 

 
whatever[0]["key0"] = obj; 
 

 
console.log(whatever);

Hoặc sử dụng Object#assign

const whatever = [{   
 
    "key1" : { "text" : "text1","group" : "1" }, 
 
    "key2" : { "text" : "text2","group" : "2" }, 
 
    "key3" : { "text" : "text3","group" : "3" } 
 
}]; 
 

 
const str = '{ "text" : "text0", "group" : "0" }'; 
 
const obj = JSON.parse(str); 
 

 
Object.assign(whatever[0], { key0: obj }) // this will also change the object 
 

 
console.log(whatever);

Đề xuất của tôi là sử dụng một mảng các đối tượng, nếu bạn muốn một thứ gì đó có thứ tự.

const whatever = [ 
 
    { "text" : "text1","group" : "1" }, 
 
    { "text" : "text2","group" : "2" }, 
 
    { "text" : "text3","group" : "3" } 
 
]; 
 

 
const str = '{ "text" : "text0", "group" : "0" }'; 
 
const obj = JSON.parse(str); 
 

 
// Add to the start 
 
whatever.unshift(obj); 
 
console.log(whatever); 
 

 
// Add to the end 
 
whatever.push(obj); 
 
console.log(whatever);

+0

Về mặt kỹ thuật sai, "lúc bắt đầu tốt hơn", bạn sẽ thêm nó vào cuối. unshift() để gắn thêm vào mặt trước của một mảng nên được sử dụng. – Adriani6

+0

@ Adriani6 Không nhìn vào phần đó. Đã chỉnh sửa –

+0

Hoàn hảo, Bây giờ, đó là câu trả lời hoàn chỉnh. – Adriani6

1

có lẽ bạn muốn một cái gì đó như thế này

var whatever = [{   
 
"key1" : { "text" : "text1","group" : "1" }, 
 
"key2" : { "text" : "text2","group" : "2" }, 
 
"key3" : { "text" : "text3","group" : "3" } 
 
}]; 
 

 
Object.assign(whatever[0], {key4 : { "text" : "text4","group" : "4" }}); 
 

 
console.log(whatever);

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