动态地将变量名称值对添加到JSON对象

Mik*_*ike 60 javascript object object-literal

我有一个充满ips的json对象

var ips = {}
Run Code Online (Sandbox Code Playgroud)

然后我像这样添加ip对象到这个对象

ips[ipID] = {}
Run Code Online (Sandbox Code Playgroud)

然后我需要为每个ip添加动态/变量名称值对,所以我使用这样的代码

var name; var value; var temp = {};
tmp[name] = value
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将这些名称值对/ tmp添加到我的ipID对象中,以便我的结果如下

ipID = { name : value, anotherName : anotherValue }
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 170

那不是JSON.它只是Javascript对象,与JSON没有任何关系.

您可以使用括号动态设置属性.例:

var obj = {};
obj['name'] = value;
obj['anotherName'] = anotherValue;
Run Code Online (Sandbox Code Playgroud)

这与使用如下对象文字创建对象完全相同:

var obj = { name : value, anotherName : anotherValue };
Run Code Online (Sandbox Code Playgroud)

如果已将对象添加到ips集合中,则使用一对括号来访问集合中的对象,使用另一对来访问对象中的对象:

ips[ipId] = {};
ips[ipId]['name'] = value;
ips[ipId]['anotherName'] = anotherValue;
Run Code Online (Sandbox Code Playgroud)

注意与上面的代码相似,但你只是使用ips[ipId]而不是obj.

您还可以从集合中获取对象的引用,并在集合保留在集合中时使用它来访问该对象:

ips[ipId] = {};
var obj = ips[ipId];
obj['name'] = value;
obj['anotherName'] = anotherValue;
Run Code Online (Sandbox Code Playgroud)

您可以使用字符串变量来指定属性的名称:

var name = 'name';
obj[name] = value;
name = 'anotherName';
obj[name] = anotherValue;
Run Code Online (Sandbox Code Playgroud)

它是标识属性的变量(字符串)的值,因此当您obj[name]在上面的代码中使用这两个属性时,它是您访问它时变量中的字符串,用于确定将访问哪个属性.


Dyl*_*ogg 21

使用ECMAScript 6有一种更好的方法.

您可以在对象属性定义中使用计算属性名称,例如:

var name1 = 'John'; 
var value1 = '42'; 
var name2 = 'Sarah'; 
var value2 = '35';

var ipID = { 
             [name1] : value1, 
             [name2] : value2 
           }
Run Code Online (Sandbox Code Playgroud)

这相当于以下内容,其中包含属性名称的变量.

var ipID = { 
             John: '42', 
             Sarah: '35' 
           }
Run Code Online (Sandbox Code Playgroud)


Max*_*Max 7

当使用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"}
Run Code Online (Sandbox Code Playgroud)

以下是Chrome控制台测试的屏幕截图

截图


ora*_*ips 5

我假设"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's not already defined here
    var entries[name] = value;
}
Run Code Online (Sandbox Code Playgroud)