无法将对象插入到json对象的数组中

时间:2017-09-22 08:28:38

标签: javascript jquery json

请原谅我这个简单的问题 - 但我似乎错过了一些明显的东西。任何指针都会有很大的帮助。

我有一个类似

的JSON
var  whatever = [{           
"key1" : { "text" : "text1","group"  : "1" },
"key2" : { "text" : "text2","group"  : "2" },
"key3" : { "text" : "text3","group"  : "3" }
}];

我正在尝试添加另一个对象(最好在开始时) - 但是无法让它工作。

var str = '{"text":"text0","group":"0"}';
var obj = JSON.parse(str);
whatever[0].put("key0",obj);

获得以下错误:

Uncaught TypeError: whatever[0].put is not a function

fiddle

2 个答案:

答案 0 :(得分:3)

对象上没有put函数。使用属性而不是它。如果要分配给不存在的属性,它会创建一个新属性并将值赋给它。

whatever[0]["key0"] = obj;

在开始时优先与有关,对象属性没有顺序。这是一个错误的陈述。如果你想要排序,试着从对象数组的视图中思考而不是包含对象的对象数组。

代码示例

const whatever = [{           
   "key1" : { "text" : "text1","group"  : "1" },
   "key2" : { "text" : "text2","group"  : "2" },
   "key3" : { "text" : "text3","group"  : "3" }
}];

const str = '{ "text" : "text0", "group" : "0" }';
const obj = JSON.parse(str);

whatever[0]["key0"] = obj;

console.log(whatever);

或使用Object#assign

const whatever = [{           
   "key1" : { "text" : "text1","group"  : "1" },
   "key2" : { "text" : "text2","group"  : "2" },
   "key3" : { "text" : "text3","group"  : "3" }
}];

const str = '{ "text" : "text0", "group" : "0" }';
const obj = JSON.parse(str);

Object.assign(whatever[0], { key0: obj }) // this will also change the object

console.log(whatever);

我的建议是使用一个对象数组,如果你想要一些订单。

const whatever = [
   { "text" : "text1","group"  : "1" },
   { "text" : "text2","group"  : "2" },
   { "text" : "text3","group"  : "3" }
];

const str = '{ "text" : "text0", "group" : "0" }';
const obj = JSON.parse(str);

// Add to the start
whatever.unshift(obj);
console.log(whatever);

// Add to the end
whatever.push(obj);
console.log(whatever);

答案 1 :(得分:1)

也许你想要这样的东西

var  whatever = [{           
"key1" : { "text" : "text1","group"  : "1" },
"key2" : { "text" : "text2","group"  : "2" },
"key3" : { "text" : "text3","group"  : "3" }
}];

Object.assign(whatever[0], {key4 : { "text" : "text4","group"  : "4" }});

console.log(whatever);