如何从二维数组而不是单个条目中检索列?我这样做是因为我只想在其中一列中搜索一个字符串,所以如果有另一种方法可以实现这一点,请告诉我。
我正在使用以这种方式定义的数组:
var array=[];
最后,该数组的大小为 20(col)x3(rows),我需要读取第一行并检查其中是否存在某个短语。
如何从二维数组而不是单个条目中检索列?我这样做是因为我只想在其中一列中搜索一个字符串,所以如果有另一种方法可以实现这一点,请告诉我。
我正在使用以这种方式定义的数组:
var array=[];
最后,该数组的大小为 20(col)x3(rows),我需要读取第一行并检查其中是否存在某个短语。
使用map 函数可以轻松获取一列。
// a two-dimensional array
var two_d = [[1,2,3],[4,5,6],[7,8,9]];
// take the third column
var col3 = two_d.map(function(value,index) { return value[2]; });
为什么要费心切片呢?只需过滤矩阵即可找到感兴趣的行。
var interesting = two_d.filter(function(value,index) {return value[1]==5;});
// interesting is now [[4,5,6]]
遗憾的是,过滤器和地图在 IE9 及更低版本上本身不可用。MDN 文档为没有本机支持的浏览器提供了实现。
使用Array.prototype.map()
带箭头的功能:
const arrayColumn = (arr, n) => arr.map(x => x[n]);
const twoDimensionalArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
];
console.log(arrayColumn(twoDimensionalArray, 0));
注意:Array.prototype.map()
和箭头函数是 ECMAScript 6 的一部分,并非所有地方都支持,请参阅ECMAScript 6 兼容性表。
您必须遍历二维数组中的每个元素,并获得第n列。
function getCol(matrix, col){
var column = [];
for(var i=0; i<matrix.length; i++){
column.push(matrix[i][col]);
}
return column;
}
var array = [new Array(20), new Array(20), new Array(20)]; //..your 3x20 array
getCol(array, 0); //Get first column
您可以使用以下数组方法从二维数组中获取列:
const array_column = (array, column) => array.map(e => e[column]);
const array_column = (array, column) => array.reduce((a, c) => {
a.push(c[column]);
return a;
}, []);
const array_column = (array, column) => {
const result = [];
array.forEach(e => {
result.push(e[column]);
});
return result;
};
如果您的二维数组是正方形(每行的列数相同),则可以使用以下方法:
const array_column = (array, column) => array.flat().filter((e, i) => i % array.length === column);
var data = [
["a1", "a2", "a3"],
["b1", "b2", "b3"],
["c1", "c2", "c3"]
];
var col0 = data.map(d => d[0]); // [ 'a1', 'b1', 'c1' ]
var col1 = data.map(d => d[1]); // [ 'a2', 'b2', 'c2' ]