wake-up-neo.com

Dynamisches Hinzufügen von Variablennamen-Wertpaaren zu JSON-Objekten

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 }
57
Mike

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.

164
Guffa

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' 
           }
20
Dylan Hogg

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

screenshot

7
Max

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;
}
5
orangepips

in Javascript.

    var myObject = { "name" : "john" };
    // { "name" : "john" };
    myObject.gender = "male";
    // { "name" : "john", "gender":"male"};
3
Atif Hussain

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"
  }
}
1
Hamzeen Hameem

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}
1
user4953229

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>
0
Penny Liu