Ich habe einen Fall wie: Ich möchte einem JSON-Array in TypeScript wie unten Elemente hinzufügen

[ 
{
"a" : "a1",
"b" : "b1"
}
]

Jetzt möchte ich dem obigen Objekt Werte hinzufügen, ohne einen neuen Block zu erstellen. Ich möchte beispielsweise ein Schlüssel-Wert-Paar als "C": "c1" und "d": "d1" hinzufügen. Danach muss mein JSON-Array wie folgt aussehen

[ 
{
"a" : "a1",
"b" : "b1"
"c" : "c1",
"d" : "d1"
}
]

Was ich versucht habe:

let someData : any [] = [];

someData.push({
"a" : "a1",
"b" : b1"
})

someData.push({
"c" : "c1",
"d" : d1"
})

Es werden jedoch zwei Datensätze wie unten erstellt, aber das ist falsch

[ 
{
"a" : "a1",
"b" : "b1"
}
{
"c" : "c1",
"d" : "d1"
}
]

Außerdem habe ich versucht, unshift wie folgt zu verwenden

someData.unshift({
"c" : "c1",
"d" : d1"
})

Dies gibt das Ergebnisobjekt als zurück

[ 
{
"a" : "a1",
"b" : "b1"
}
{
"c" : "c1",
"d" : "d1"
}
]

Gibt es eine Möglichkeit zu tun?

Beispielsweise,

for(int i =0; i<3; i++){
  someData.push({
    i : i+1
})

Aber der obige Codeblock erzeugt eine falsche Array-Struktur, aber ich möchte, wie unten

{
0 :1,
1:2,
2:3
}
}
1
user2000189 18 Apr. 2018 im 08:06

4 Antworten

Beste Antwort

Es soll so sein ...

let someData : any [] = [];

someData.push({
"a" : "a1",
"b" : b1"
})

someData[0]["c"] = "c1";
someData[0]["d"] = "d1";

Wenn Sie also die Werte von someData protokollieren, wird dies angezeigt

console.log(someData); //[{"a":"a1","b" : "b1", "c":"c1", "d":"d1"}]

Zum Durchlaufen von Werten ...

let valuesToPut = [["c","c1"],["d","d1"]];

 for(let i = 0; i < valuesToPut.length; i++){
    someData[0][valuesToPut[i][0]] = valuesToPut[i][1]
 }
2
Himanshu Bansal 18 Apr. 2018 im 05:57

Es gibt wenig Verwirrung zwischen Object und Array. Hier versuchen Sie, den Object, die im Index 0 Ihres Arrays gespeichert sind, ein Element hinzuzufügen.

Lassen Sie uns folgenden Code versuchen:

let someData : any [] = [];
// Create first index of array and create on it your Object.
someData.push({
    "a" : "a1",
    "b" : b1"
});

// Override first index of array by merge of previous data + new one.
someData[0] = Object.assign(someData[0], {
    "c1" : "c1",
    "d1" : "d1"
});

Objektzuweisungsdokumentation

Eine andere Möglichkeit, dies zu tun: Object.defineProperties ()

1
Yanis-git 18 Apr. 2018 im 05:15

Wie Sie bereits erwähnt haben, handelt es sich um ein Array-JSON-Format.

Wenn Sie also auf ein Element im Array zugreifen, sollten Sie den Array-Index angeben.

Ex:

let tempArray = [ 
{
"a" : "a1",
"b" : "b1"
}
]  

=> tempArray [0] hat diesen Wert.

{
"a" : "a1",
"b" : "b1"
}

Wenn Sie dem tempArray [0] einige zusätzliche Werte hinzufügen, sollten Sie wie folgt auf das Element zugreifen:

tempArray[0]['c'] = "c1";
tempArray[0]['d'] = "d1";
1
Jihoon Kwon 18 Apr. 2018 im 05:22
//Let's start with what you're doing
let someData = [];

someData.push({
"a" : "a1",
"b" : "b1"
});
// pushes a collection of 2 key value pairs in as the first entry to someData
someData.push({
"c" : "c1",
"d" : "d1"
});
// pushes a collection of 2 key value pairs in as the second entry to someData
console.log(someData);

// what you might want to do:
someData = [];

someData.push({
"a" : "a1",
"b" : "b1"
});
// pushes a collection of 2 key value pairs in as the first entry to someData
someData[0].c = "c1";
//Sets a value to the key c in the first element of some data
someData[0].d = "d1";
//Sets a value to the key d in the first element of some data
console.log(someData)

// What you probably want to do.
someData = {};
for(let i of [1,2,3,4]){
  someData[String.fromCharCode(i+96)] = String.fromCharCode(i+96)+"1";
}
console.log(someData)
1
kpie 18 Apr. 2018 im 05:27