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

IT技术 javascript object object-literal
2021-03-16 17:14:49

我有一个充满 ips 的 json 对象,例如

var ips = {}

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

ips[ipID] = {}

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

var name; var value; var temp = {};
tmp[name] = value

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

ipID = { name : value, anotherName : anotherValue }
6个回答

那不是 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]在上面的代码中使用这两个属性时,正是您访问它时变量中的字符串决定了将要访问的属性。

好吧,我正在使用 .change 函数来生成它,并且由于某种原因它不断覆盖我的名字。无论如何要暂时尊重变量?
2021-04-21 17:14:49
@Mike:您可以使用变量来指定属性的名称。决定访问什么属性的是访问对象时变量的值,因此在访问之间将变量更改为不同的字符串不是问题。见我上面的补充。
2021-05-03 17:14:49
发布 .change 函数的代码,我们可以更好地帮助您。
2021-05-03 17:14:49
Pastie.org/1264618正如我提到的,它只允许一个名称值对......
2021-05-06 17:14:49
这会正常工作,但我的名字也是变量。因此,当名称更改时,它会覆盖之前的名称值对。
2021-05-09 17:14:49

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' 
           }

使用 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 控制台中测试的屏幕截图

截屏

myArray真正的阵列?它似乎是一个Object或哈希。
2021-04-28 17:14:49
是的,myObject 会是一个更好的名称选择
2021-05-20 17:14:49

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

在 JavaScript 中。

    var myObject = { "name" : "john" };
    // { "name" : "john" };
    myObject.gender = "male";
    // { "name" : "john", "gender":"male"};
当我尝试这样做时,我收到错误消息“myObject.push 不是函数”。
2021-05-19 17:14:49