如何使用来自几个javascript数组的信息构造一个json对象

Wil*_*Lou 1 javascript arrays json

我已经有两个js数组,比如:名称和值(长度相同),现在我想以某种格式构造一个json对象?例如:

 names = ["label1","label2","label3"];
 values = [[[0,1],[1,9],[2,10]],[[0,89],[1,91],[2,1]],[[0,1],[1,9],[2,10]]];
Run Code Online (Sandbox Code Playgroud)

我想以data_spec这种格式有一个json数组:

 [{
    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]]
  }]
Run Code Online (Sandbox Code Playgroud)

谁能告诉一个怎么样?非常感谢!

Mic*_*man 6

对于一些变化和检查,

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] 
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,非稀疏且不包含任何会被评估为false的东西.

如果您的框架将每个函数添加到Array并且您不关心性能,

var data_spec = [];
names.each(function(name) {
    data_spec.push({ label : name, data : values[names.indexOf(name)] });
});
Run Code Online (Sandbox Code Playgroud)

如果您的框架是一个干净的框架,如Dojo并将其放在其他地方(例如Dojo),

var data_spec = [];
dojo.forEach(names, function(name) {
    data_spec.push({ label : name, data : values[names.indexOf(name)] });
});
Run Code Online (Sandbox Code Playgroud)

如果你的框架有一个每个在它们的预期位置返回与每一个操作的结果相同长度的阵列功能,

var data_spec = arrayOfResultsEach(names, function(name) {
    return { label : name, data : values[names.indexOf(name)] };
});
Run Code Online (Sandbox Code Playgroud)

这些只是为了说明,indexOf任意长度的循环内部是一个主要的代码气味.