我有一个这样的数组:
var products = [
['date1','prod1',1,2],
['date2','prod2',3,4],
['date3','prod3',5,6],
['date4','prod4',7,8],
['date5','prod5',9,0]
];
需要将整数拉出数组并将其格式化为:
var newProductsArray = [[1,3,5,7,9],[2,4,6,8,0]];
它需要能够动态扩展,因为products
数组将包含更多"列"。
我有这个代码,但它正在向后做,并且无法弄清楚如何循环并只是分解数组。我确信它很简单,我很遗憾。
var metricStartPosition = 2;
var dataSetInnerArray = [];
var dataSetArray = [];
for (var i = 0; i < array.length; i++) {
for (var k = metricStartPosition; k < array[i].length; k++) {
dataSetInnerArray.push(array[i][k]);
};
dataSetArray.push(dataSetInnerArray);
dataSetInnerArray = [];
};
答案 0 :(得分:2)
您可以这样做:
var products = [
['date1','prod1',1,2,'a','b'],
['date2','prod2',3,4,'c','d'],
['date3','prod3',5,6,'e','f'],
['date4','prod4',7,8,'g','h'],
['date5','prod5',9,0,'i','j']
];
var metricStartPosition = 2;
var newProductsArray = products.reduce(function(output, item) {
item.slice(metricStartPosition).forEach(function(v, i) {
(output[i] || (output[i] = [])).push(v);
});
return output;
}, []);
console.log(JSON.stringify(newProductsArray));
&#13;
可以使用任意数量的列。
当然,您可以在.forEach()
内使用嵌套的for
循环或旧式嵌套.forEach()
循环代替.reduce()
。
答案 1 :(得分:1)
如果我正确地提出了你的问题,那么颠倒两个for循环的顺序就可以了:
var metricStartPosition = 2;
var dataSetInnerArray = [];
var dataSetArray = [];
for (var k = metricStartPosition; k < products[0].length; k++) {
for (var i = 0; i < products.length; i++) {
dataSetInnerArray.push(products[i][k]);
};
dataSetArray.push(dataSetInnerArray);
dataSetInnerArray = [];
};
答案 2 :(得分:0)
这应该翻转阵列。
var newArray = array[0].map(function(col, i) {
return array.map(function(row) {
return row[i]
})
});
这是一个功能:
function foo (array) {
var newArray = array[0].map(function(col, i) {
return array.map(function(row) {
return row[i]
})
});
return newArray;
}
通过翻转数组我的意思是:
1 2 3 1 4 7
4 5 6 -> 2 5 8
7 8 9 3 6 9
在你的情况下:
var products = [
['date1','prod1',1,2],
['date2','prod2',3,4],
['date3','prod3',5,6],
['date4','prod4',7,8],
['date5','prod5',9,0]
];
var newProducts = [
['date1','date2','date3','date4','date5'],
['prod1','prod2','prod3','prod4','prod5'],
[1,3,5,7,9],
[2,4,6,8,0]
];
答案 3 :(得分:0)
您可以尝试逐个索引所有列(假设数据的所有行都是逐列的相同类型:
arrayRow = products[0] //['date1','prod1',1,2]
newProductsArray = [];
intIndices = [];
arrayRow.forEach(function(data, i) {
if (typeof(data) === 'number')
intIndices.push(i);
});
// intIndices should be [2, 3]
然后遍历整个产品数组以获取所有列:
intIndices.forEach(function (colIndex) {
innerArray = [];
for (var i = 0; i < products.length; i++) {
innerArray.push(products[i][colIndex]);
}
newProductsArray.push(innerArray);
});
// you should get nested arrays with all the integer columns
// [ [ 1, 3, 5, 7, 9 ],
// [ 2, 4, 6, 8, 0 ] ]