Подтвердить что ты не робот

Динамически добавлять пары значений имени переменной в объект 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 }
4b9b3361

Ответ 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}