[英]how to construct a json object using info from several javascript arrays
I have two js arrays already, say: names and values (with the same length), now I would like to construct a json object in certain format? 我已经有两个js数组,例如:名称和值(具有相同的长度),现在我想以某种格式构造一个json对象? For example:
例如:
names = ["label1","label2","label3"];
values = [[[0,1],[1,9],[2,10]],[[0,89],[1,91],[2,1]],[[0,1],[1,9],[2,10]]];
I would like to have a json array data_spec
in this format: 我想使用以下格式的json数组
data_spec
:
[{
label:"label1",
data:[[0,1],[1,9],[2,10]]
},
{
label:"label2",
data:[[0,89],[1,91],[2,1]]
},
{
label:"label3",
data:[[0,1],[1,9],[2,10]]
}]
Could anyone tell one how? 谁能告诉一个人如何? Thanks a lot!
非常感谢!
For a bit of variety and a check, 对于一些变化和检查,
var data_spec = [];
if (names.length != values.length) {
// panic, throw an exception, log an error or just return an empty array
} else {
for (var i=0, name; name = names[i]; i++) { // assuming a non-sparse array
data_spec[i] = {
label : name,
data : values[i]
};
}
}
That is, non-sparse and not containing anything else that would evaluate to false . 也就是说, 非稀疏并且不包含任何其他会评估为false的东西 。
If your framework has an each function added to Array and you don't care about performance, 如果您的框架已将每个函数添加到Array且您不关心性能,
var data_spec = [];
names.each(function(name) {
data_spec.push({ label : name, data : values[names.indexOf(name)] });
});
If your framework is a clean one like Dojo and puts it somewhere else (ex is Dojo), 如果您的框架是像Dojo这样干净的框架,并将其放在其他地方(例如Dojo),
var data_spec = [];
dojo.forEach(names, function(name) {
data_spec.push({ label : name, data : values[names.indexOf(name)] });
});
If your framework has an each function that returns an Array of identical length with the results of every operation at their expected position, 如果您的框架中的每个函数都返回一个长度相同的数组,并且每个操作的结果都在预期位置,
var data_spec = arrayOfResultsEach(names, function(name) {
return { label : name, data : values[names.indexOf(name)] };
});
These are just for illustration, indexOf inside loops of arbitrary length is a major code smell. 这些只是为了说明,任意长度的内部循环的indexOf是主要的代码味道。
Just use a loop (make sure the two arrays are of same length) 只需使用一个循环(确保两个数组的长度相同)
result = [];
for(var i=0, len=names.length; i < len; i++) {
result.push({label: names[i], data: values[i]});
}
var myArray =
[{
"label": "label1",
"data" :
{
"0": "1",
"1": "9",
"2": "10"
}
},
{
"label": "label2",
"data" :
{
"0": "89",
"1": "91",
"2": "1"
}
},
{
"label": "label3",
"data" :
{
"0": "1",
"1": "9",
"2": "10"
}
}];
alert(myArray[0].data[2]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.