Динамически добавлять пары значений имени переменной в объект JSON
У меня есть json-объект, полный ips, например
var ips = {}
Затем я добавляю ip-объекты к этому объекту так
ips[ipID] = {}
Затем мне нужно добавить пары значений переменных/переменных для каждого ip, поэтому я использую код, подобный этому
var name; var value; var temp = {};
tmp[name] = value
Мой вопрос: как я могу добавить эти пары значений /tmp в мои объекты ipID, чтобы мой результат получился как
ipID = { name : value, anotherName : anotherValue }
Ответы
Ответ 1
Это не JSON. Это просто объекты Javascript и не имеет ничего общего с JSON.
Вы можете использовать скобки для динамического задания свойств. Пример:
var obj = {};
obj['name'] = value;
obj['anotherName'] = anotherValue;
Это дает то же самое, что и создание объекта с литералом объекта следующим образом:
var obj = { name : value, anotherName : anotherValue };
Если вы уже добавили объект в коллекцию ips
, вы используете одну пару скобок для доступа к объекту в коллекции и другую пару для доступа к объекту в объекте:
ips[ipId] = {};
ips[ipId]['name'] = value;
ips[ipId]['anotherName'] = anotherValue;
Обратите внимание на сходство с приведенным выше кодом, но вы просто используете ips[ipId]
вместо obj
.
Вы также можете получить ссылку на объект обратно из коллекции и использовать его для доступа к объекту, пока он остается в коллекции:
ips[ipId] = {};
var obj = ips[ipId];
obj['name'] = value;
obj['anotherName'] = anotherValue;
Вы можете использовать строковые переменные для указания имен свойств:
var name = 'name';
obj[name] = value;
name = 'anotherName';
obj[name] = anotherValue;
Это значение переменной (строки), которая идентифицирует свойство, поэтому, пока вы используете obj[name]
для обоих свойств в вышеприведенном коде, это строка в переменной в тот момент, когда вы обращаетесь к ней, которая определяет, какое свойство будет доступ к ним.
Ответ 2
В ECMAScript 6 есть лучший способ.
Вы можете использовать имена вычисленных свойств в определениях свойств объекта, например:
var name = 'John';
var value = '42';
var name2 = 'Sarah';
var value2 = '35';
var ipID = { [name] : value, [name2] : value2 }
Это эквивалентно следующему с переменными для имен свойств, если требуется.
var ipID = { John: "42", Sarah: "35" }
Ответ 3
при использовании javascript-объектов вы также можете просто использовать "точечную нотацию" для добавления элемента, (который предпочитает JSLint)
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"}
Вот скриншот от тестирования на консоли Chrome
![screenshot]()
Ответ 4
Я предполагаю, что каждая запись в "ips" может иметь несколько пар значений имени, поэтому она вложенна. Вы можете достичь такой структуры данных как таковой:
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 not already defined here
var entries[name] = value;
}
Ответ 5
в Javascript.
var myObject = { "name" : "john" };
// { "name" : "john" };
myObject.gender = "male";
// { "name" : "john", "gender":"male"};
Ответ 6
Из того, что предложили другие ответы, я считаю, что это может помочь:
var object = ips[ipId];
var name = "Joe";
var anothername = "Fred";
var value = "Thingy";
var anothervalue = "Fingy";
object[name] = value;
object[anothername] = anothervalue;
Однако это не проверено, просто предположение, основанное на постоянном повторении:
object["string"] = value;
//object = {string: value}