我必须准备在谷歌图表中使用的数据。我的意见是:
myHeader = ["header 1", "header 2"];
myCol1 = [1, 2, 3, 4, 5];
myCol2 = [100, 200, 300, 400, 500];
我需要的是:
myData = [["header1", "header2"],[1,100],[2, 200], [3, 300],[4, 400], [5, 500]];
我该如何转换它?我尝试使用push
,但无法将[1,100]
推送到包含["header1", "header2"]
这是我之前尝试过的:
var myDATA = [new Array('header1', 'header2'), two1dto2d(myDate, myTemp)];
function two1dto2d(a,b) {
var c = new Array;
for (var i = 0; i < a.length; i++) {
A = new Array(a[i],b[i]);
console.log(A);
c.push(A);
}
return c
};
但结果不符合我的预期:
有任何想法吗?
感谢
答案 0 :(得分:1)
这个怎么样? http://jsfiddle.net/theoutlander/pXLLz/
myHeader = ["header 1", "header 2"];
myCol1 = [1, 2, 3, 4, 5];
myCol2 = [100, 200, 300, 400, 500];
mydata = [myHeader];
for(i=0; i<5; i++)
{
mydata.push([myCol1[i],myCol2[i]]);
}
console.log(JSON.stringify(mydata));
答案 1 :(得分:1)
你得到的是一个三维数组,因为你将列对放入一个数组,然后你将它放在最后的数组中。
您需要将列对推入最外面的数组。例如:
var myDATA = [new Array('header1', 'header2')];
two1dto2d(myDATA, myDate, myTemp);
function two1dto2d(c, a, b) {
for (var i = 0; i < a.length; i++) {
c.push([a[i], b[i]]);
}
}
答案 2 :(得分:0)
这应该有效
var output=[myHeader];
for(i=0;i<myCol1.length;i++){
output.push( [myCol1[i], myCol2[i] ]);
};
答案 3 :(得分:0)
除了标题之外,您正在寻找通常称为zip
的内容,如下划线所示http://underscorejs.org/#zip
myHeader = ["header 1", "header 2"];
myCol1 = [1, 2, 3, 4, 5];
myCol2 = [100, 200, 300, 400, 500];
// basic zip implementation
var zip = function (arr1, arr2) {
var len = Math.max(arr1.length, arr2.length);
var arr = new Array(len);
for (var i = 0; i < len; i += 1) {
arr[i] = [arr1[i], arr2[i]];
}
return arr;
};
data = [myHeader].concat(zip(myCol1, myCol2));
答案 4 :(得分:0)
我提出的另一种方式,因为我之前在所有其他答案中都没有注意到[ ]
:
var foo = ['a', 'b', 'c', 'd'];
var bar = [1,2,3,4];
var ar2 = [];
for(var i in arr) {
var ar3 = []
ar3.push(foo[i], bar[i]);
ar2.push(ar3);
}
console.log(ar2);
答案 5 :(得分:0)
该功能的一般版本:
Array.prototype.mergeWith = function(...args) {
// PREPARATION
let L = this.length, // memorize the length of `this` array
n = 0, array, // iterators
res = []; // the result will be here
// CALCULATION
for (; n < L; n++) // iterate over the length of `this`
for (array of args) // iterate over `args`
if (array instanceof Array && array.length === L) // if `array` is really an array and it is as lengthy as `this`, …
res.push([this[n], array[n]]); // … push every n-th object of `array` to n-th array of `res`
else return; // check whether all the operands are arrays of the same length
return res; // eventually return result
}
同样的事情缩小了:
Array.prototype.mergeWith = function(...A) {
let L = this.length, r = [], n = 0, a;
for (; n < L; n++) for (a of A) if (a instanceof Array && a.length === L) r.push([this[n], a[n]]); else return;
return r;
}
使用:
var arr1 = [1, 2, 3, 4],
arr2 = ["a", "b", "c", "d"];
var A = arr1.mergeWith(arr2);
// [ [1, "a"],
// [2, "b"],
// [3, "c"],
// [4, "d"] ]
var arr3 = [[31, 32], [33, 34], [35, 36], [37, 38]];
var B = arr1.mergeWith(arr2, arr3);
// [ [1, "a", [ 31, 32 ]],
// [2, "b", [ 33, 34 ]],
// [3, "c", [ 35, 36 ]],
// [4, "d", [ 37, 38 ]] ]
在您的特定情况下使用:
myData = myCol1.mergeWith(myCol2);
myData.unshift(myHeader);
// [ ["header1", "header2"],
// [1, 100],
// [2, 200],
// [3, 300],
// [4, 400],
// [5, 500] ];