我要做的是创建一个具有不同数量元素的JSON。
json = [
{
key: "test",
values: [
{
"label" : "A" ,
"value" : 29
} ,
{
"label" : "B" ,
"value" : 0
} ,........
元素(和信息本身)values
将包含的数量并不总是相同。
答案 0 :(得分:0)
您的values
密钥指向array
。如果从不更改(意味着值将始终是一个数组),那么尝试添加它并不重要。无论是数组,对象还是元素,您都可以使用.push()
json[0].values.push(new_element_or_array_variable);
如果你想重新创建一个与数值相同的数组,那么知道它是如何构建的通常会更好,但是可以说你盲目地进入。
var json = [{
key: "test",
values: [{
"label": "A",
"value": 29
}, {
"label": "B",
"value": 0
}]
}];
var struct = json[0].values.map(function (a, b) {
if (typeof a === 'object') {
var obj = {};
for (var key in a) {
if (a.hasOwnProperty(key)) {
obj[key] = -1;
}
}
return obj;
}
});
console.log(struct);
那么你就拥有了一个带有空对象的值的副本。
在此更新:
//...
for (var key in a) {
if (a.hasOwnProperty(key)) {
obj[key] = -1;
}
}
//...
你做的Evey循环(在上面的代码中)将逐个访问对象中的每个键。因此在第一个循环(=迭代)中,键将包含“label”,在第二次迭代中,它将包含“value”。为了确保您只采用第一个对象的结构,并且没有考虑其余部分,只需执行以下操作:
if (typeof a === 'object' && b == 0) {
var obj = {};
for (var key in a) {
if (a.hasOwnProperty(key)) {
obj[key] = -1;
}
}
return obj;
}
其中a
是object
而b
是object
中values array
的索引。
另请注意,我的map函数仅检查它是否为对象(带有typeof)。如果你有整数,字符串或数组,你应该检查它们的类型并判断你想用它们做什么。
你可以这样做:
if (typeof a === 'object') {
//... code here
}else{
return a;
}
答案 1 :(得分:0)
我添加了第二个问题,我忘了添加,你也有答案吗?
如何创建一个数组,其元素与“values”具有相同的结构?
你需要一个数组,object
就像这样
var values = [];
var obj = {}; // line 1
obj.label= 'desired value'; // line 2
obj.value= 'desired value';
values.pust(obj); //line 3
如果要在数组中插入多个,可以将line1-line3
置于循环中。