2017-09-22 32 views
5

Przepraszam za ten prosty problem - ale wydaje mi się, że brakuje mi czegoś oczywistego. Każdy wskaźnik byłby bardzo pomocny.Nie można wstawić obiektu do tablicy obiektu json

Mam JSON jak

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

Próbuję dodać inny obiekt (na początku najlepiej) - ale po prostu nie mógł dostać się do pracy.

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

Pierwsze poniższy błąd:

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

fiddle

+0

właściwości obiektu nie mają rozkaz, więc dodając że "na początku" nie ma sensu . – Jamiec

+0

tylko pytanie, dlaczego tablica? –

+0

Błąd był całkiem jasny. Nie traktuj tego jako niegrzecznego, ale powinieneś naprawdę postarać się zrozumieć, co mówi tłumacz/kompilator. Jeśli chodzi o javascript otwierający konsolę piszącą "obj". pokazuje ukończenie, które jest naprawdę pomocne jako pierwsze źródło dokumentacji – ilmirons

Odpowiedz

3

Nie ma put funkcja na obiekcie. Użyj właściwości zamiast tego. Jeśli chcesz przypisać do właściwości, która nie istnieje, tworzy nową i przypisuje jej wartość.

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

Co jest związane z na początku najlepiej, nie ma nakazu właściwości obiektu. To błędne stwierdzenie. Jeśli chcesz zamówić, spróbuj pomyśleć z widoku tablicy obiektów zamiast z tablicy obiektów, która zawiera obiekty.

przykłady Kod

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);

lub użyj 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);

Moja sugestia to użycie tablicy obiektów, jeśli chcesz czegoś z zamówieniem.

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

Technicznie źle "na początku najlepiej" twój doda go do końca. unshift(), aby dołączyć do przodu tablicy należy użyć. – Adriani6

+0

@ Adriani6 Nie patrzyłem na tę część. Edytowane –

+0

Perfect, Teraz jest to kompletna odpowiedź. – Adriani6

1

może chcesz coś takiego

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);