javascript - objetos - Agregue dinĂ¡micamente pares de valores de nombre de variable al objeto JSON
recorrer array de objetos javascript (7)
Al usar objetos javascript, también puede usar "notación de puntos" para agregar un elemento (lo que JSLint prefiere )
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"}
Aquí hay una captura de pantalla de las pruebas en la consola de Chrome
Tengo un objeto json lleno de ips como
var ips = {}
Luego agrego objetos ip a este objeto como si fuera
ips[ipID] = {}
Entonces necesito agregar pares de valores de nombres dinámicos / variables a cada ip, así que estoy usando un código como este
var name; var value; var temp = {};
tmp[name] = value
Mi pregunta es, ¿cómo puedo agregar estos pares de valores de nombre / tmp a mis objetos ipID para que mi resultado resulte como
ipID = { name : value, anotherName : anotherValue }
Con ECMAScript 6 hay una mejor manera.
Puede usar nombres de propiedad calculados en las definiciones de propiedad del objeto, por ejemplo:
var name1 = ''John'';
var value1 = ''42'';
var name2 = ''Sarah'';
var value2 = ''35'';
var ipID = {
[name1] : value1,
[name2] : value2
}
Esto es equivalente al siguiente, donde tiene variables para los nombres de las propiedades.
var ipID = {
John: ''42'',
Sarah: ''35''
}
De lo que han propuesto las otras respuestas, creo que esto podría ayudar:
var object = ips[ipId];
var name = "Joe";
var anothername = "Fred";
var value = "Thingy";
var anothervalue = "Fingy";
object[name] = value;
object[anothername] = anothervalue;
Sin embargo, esto no se prueba, solo una suposición basada en la repetición constante de:
object["string"] = value;
//object = {string: value}
Eso no es JSON. Son solo objetos Javascript, y no tiene nada que ver con JSON.
Puede usar corchetes para establecer las propiedades dinámicamente. Ejemplo:
var obj = {};
obj[''name''] = value;
obj[''anotherName''] = anotherValue;
Esto da exactamente lo mismo que crear el objeto con un objeto literal como este:
var obj = { name : value, anotherName : anotherValue };
Si ya ha agregado el objeto a la colección ips
, use un par de corchetes para acceder al objeto en la colección y otro par para acceder a la propiedad del objeto:
ips[ipId] = {};
ips[ipId][''name''] = value;
ips[ipId][''anotherName''] = anotherValue;
Observe la similitud con el código anterior, pero que solo está usando ips[ipId]
lugar de obj
.
También puede obtener una referencia del objeto de la colección y usar eso para acceder al objeto mientras permanece en la colección:
ips[ipId] = {};
var obj = ips[ipId];
obj[''name''] = value;
obj[''anotherName''] = anotherValue;
Puede usar variables de cadena para especificar los nombres de las propiedades:
var name = ''name'';
obj[name] = value;
name = ''anotherName'';
obj[name] = anotherValue;
Es el valor de la variable (la cadena) que identifica la propiedad, por lo tanto, mientras usa obj[name]
para ambas propiedades en el código anterior, es la cadena de la variable en el momento en que accede que determina a qué propiedad se accederá .
Supongo que cada entrada en "ips" puede tener múltiples pares de nombres de nombres, por lo que está anidada. Puede lograr esta estructura de datos como tal:
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;
}
en Javascript.
var myObject = { "name" : "john" };
// { "name" : "john" };
myObject.gender = "male";
// { "name" : "john", "gender":"male"};
si mi comprensión de su JSON inicial es correcta, cualquiera de estas soluciones puede ayudarlo a recorrer todos los identificadores de IP y asignarles un nuevo objeto.
// 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''});
});
Para confirmar:
console.log(JSON.stringify(ips, null, 2));
La declaración anterior escupe:
{
"ipId1": {
"name":"value",
"anotherName":"another value"
},
"ipId2": {
"name":"value",
"anotherName":"another value"
}
}