Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向JSON对象动态添加变量名-值对_Javascript_Object_Object Literal - Fatal编程技术网

Javascript 向JSON对象动态添加变量名-值对

Javascript 向JSON对象动态添加变量名-值对,javascript,object,object-literal,Javascript,Object,Object Literal,我有一个充满IP的json对象,比如 var ips = {} 然后我将ip对象添加到此对象,如下所示 ips[ipID] = {} 然后我需要向每个ip添加动态/变量名称-值对,所以我使用的代码如下 var name; var value; var temp = {}; tmp[name] = value 我的问题是,如何将这些名称-值对/tmp添加到我的ipID对象中,以使结果如下所示 ipID = { name : value, anotherName : anotherValue

我有一个充满IP的json对象,比如

var ips = {}
然后我将ip对象添加到此对象,如下所示

ips[ipID] = {}
然后我需要向每个ip添加动态/变量名称-值对,所以我使用的代码如下

var name; var value; var temp = {};
tmp[name] = value
我的问题是,如何将这些名称-值对/tmp添加到我的ipID对象中,以使结果如下所示

ipID = { name : value, anotherName : anotherValue }

我假设“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;
}

这不是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]
时,访问时变量中的字符串决定将访问哪个属性。

使用javascript对象时,您也可以只使用“点表示法”要添加项目,()

这是在Chrome控制台中测试的屏幕截图


根据其他答案的建议,我相信这可能会有所帮助:

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}
在Javascript中

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

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

可以在对象特性定义中使用,例如:

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

var ipID = { 
             [name1] : value1, 
             [name2] : value2 
           }
这相当于以下内容,其中属性名称有变量

var ipID = { 
             John: '42', 
             Sarah: '35' 
           }

如果我对初始JSON的理解是正确的,那么这两种解决方案中的任何一种都可能帮助您遍历所有ip ID并为每个ID分配一个新对象

// 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'});
});
确认:

console.log(JSON.stringify(ips, null, 2));
{
  "ipId1": {
    "name":"value",
    "anotherName":"another value"
  },
  "ipId2": {
    "name":"value",
    "anotherName":"another value"
  }
}
上面的说法是:

console.log(JSON.stringify(ips, null, 2));
{
  "ipId1": {
    "name":"value",
    "anotherName":"another value"
  },
  "ipId2": {
    "name":"value",
    "anotherName":"another value"
  }
}

您可以使用Lodash函数来实现这一点

var-ipID={};
_.assign(ipID,{'name':“value”},{'anotherName':“anotherValue”});
控制台日志(ipID)

这很好,但我的名字也是变量。因此,当名称更改时,它将覆盖以前的名称-值对。@迈克:您可以使用变量指定属性的名称。访问对象时变量的值决定访问哪个属性,因此在访问之间将变量更改为不同的字符串不是问题。看我上面的添加。好吧,我正在使用一个.change函数来生成这个,出于某种原因,它一直覆盖我的名字。是否有任何方法暂时遵从该变量?发布.change函数的代码,我们可以更好地帮助您。正如我提到的,它只允许一个名称-值对…您还需要代码来生成最终的JSON吗?当我尝试这样做时,可能会出现重复的错误“myObject.push不是函数”。myArray是否真的是数组?它似乎是一个
对象
或散列。是的,myObject是一个更好的名称选择