Ich habe ein json Objekt voller ips wie
var ips = {}
Ich füge diesem Objekt dann wie folgt IP-Objekte hinzu
ips[ipID] = {}
Ich muss dann dynamische/variable Namenswertpaare zu jeder IP addieren, also benutze ich Code wie diesen
var name; var value; var temp = {};
tmp[name] = value
Meine Frage ist, wie ich diese Name-Wert-Paare/tmp zu meinen ipID-Objekten hinzufügen kann, so dass mein Ergebnis wie folgt ausfällt
ipID = { name : value, anotherName : anotherValue }
Das ist kein JSON. Es handelt sich nur um Javascript-Objekte und hat überhaupt nichts mit JSON zu tun.
Sie können die Eigenschaften mithilfe von Klammern dynamisch festlegen. Beispiel:
var obj = {};
obj['name'] = value;
obj['anotherName'] = anotherValue;
Dies entspricht genau dem Erstellen des Objekts mit einem Objektliteral wie folgt:
var obj = { name : value, anotherName : anotherValue };
Wenn Sie das Objekt bereits zur Auflistung ips
hinzugefügt haben, verwenden Sie ein Paar Klammern, um auf das Objekt in der Auflistung zuzugreifen, und ein anderes Paar, um auf die Eigenschaft im Objekt zuzugreifen:
ips[ipId] = {};
ips[ipId]['name'] = value;
ips[ipId]['anotherName'] = anotherValue;
Beachten Sie die Ähnlichkeit mit dem obigen Code, aber dass Sie nur ips[ipId]
Anstelle von obj
verwenden.
Sie können auch einen Verweis auf das Objekt aus der Auflistung abrufen und diesen verwenden, um auf das Objekt zuzugreifen, während es in der Auflistung verbleibt:
ips[ipId] = {};
var obj = ips[ipId];
obj['name'] = value;
obj['anotherName'] = anotherValue;
Sie können Zeichenfolgenvariablen verwenden, um die Namen der Eigenschaften anzugeben:
var name = 'name';
obj[name] = value;
name = 'anotherName';
obj[name] = anotherValue;
Der Wert der Variablen (der Zeichenfolge), die die Eigenschaft identifiziert. Wenn Sie also obj[name]
Für beide Eigenschaften im obigen Code verwenden, bestimmt die Zeichenfolge in der Variablen zum Zeitpunkt des Zugriffs, welche Eigenschaft verwendet wird zugegriffen werden.
Mit ECMAScript 6 gibt es einen besseren Weg.
Sie können berechnete Eigenschaftsnamen in Objekteigenschaftsdefinitionen verwenden, zum Beispiel:
var name1 = 'John';
var value1 = '42';
var name2 = 'Sarah';
var value2 = '35';
var ipID = {
[name1] : value1,
[name2] : value2
}
Dies entspricht dem Folgenden, in dem Sie Variablen für die Eigenschaftsnamen haben.
var ipID = {
John: '42',
Sarah: '35'
}
wenn Sie Javascript-Objekte verwenden, können Sie auch einfach die "Punktnotation" verwenden, um ein Element hinzuzufügen. ( welches JSLint bevorzugt )
var myArray = { name : "john" };
//will initiate a key-value array with one item "name" and the value "john"
myArray.lastName = "smith";
//will add a key named lastName with the value "smith"
//Object {name: "john", lastName: "smith"}
Hier ist ein Screenshot vom Testen in der Chrome Konsole
Ich gehe davon aus, dass jeder Eintrag in "ips" mehrere Name-Wert-Paare haben kann - also ist er verschachtelt. Sie können diese Datenstruktur als solche erreichen:
var ips = {}
function addIpId(ipID, name, value) {
if (!ips[ipID]) ip[ipID] = {};
var entries = ip[ipID];
// you could add a check to ensure the name-value par's not already defined here
var entries[name] = value;
}
in Javascript.
var myObject = { "name" : "john" };
// { "name" : "john" };
myObject.gender = "male";
// { "name" : "john", "gender":"male"};
wenn mein Verständnis Ihres anfänglichen JSON korrekt ist, können Sie mit einer dieser Lösungen alle IP-IDs durchlaufen und jedem ein neues Objekt zuweisen.
// initial JSON
var ips = {ipId1: {}, ipId2: {}};
// Solution1
Object.keys(ips).forEach(function(key) {
ips[key] = {name: 'value', anotherName: 'another value'};
});
// Solution 2
Object.keys(ips).forEach(function(key) {
Object.assign(ips[key],{name: 'value', anotherName: 'another value'});
});
Zur Bestätigung:
console.log(JSON.stringify(ips, null, 2));
Die obige Aussage spuckt:
{
"ipId1": {
"name":"value",
"anotherName":"another value"
},
"ipId2": {
"name":"value",
"anotherName":"another value"
}
}
Nach dem, was die anderen Antworten vorgeschlagen haben, glaube ich, dass dies helfen könnte:
var object = ips[ipId];
var name = "Joe";
var anothername = "Fred";
var value = "Thingy";
var anothervalue = "Fingy";
object[name] = value;
object[anothername] = anothervalue;
Dies wird jedoch nicht getestet, sondern basiert auf der ständigen Wiederholung von:
object["string"] = value;
//object = {string: value}
Sie erreichen dies mit Lodash _.assign
Funktion.
var ipID = {};
_.assign(ipID, {'name': "value"}, {'anotherName': "anotherValue"});
console.log(ipID);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>