JavaScript中二维数组的切片/部分

3

我需要使用二进制代码从2D数组中取出一部分。我需要指定开始和结束的位置。

目前我有这段代码,但我相当确定它是错误的:

var slice = [[]];
var endx = 30;
var startx = 20;
var starty = 10;
var end = 20;
for (var i = sx, a = 0; i < json_data.length, a < ex; i++, a++) {
  for (var j = sy, b = 0; j < json_data[1].length, b < ey; j++, b++)
    slice[a][b] == json_data[i][j];
}

json_data是一个格式为数组的数据:

[0,0,0,0,0,1,...],[1,1,0,1,1,0...],...

这是600x600的尺寸。

1个回答

12

您可以使用slice()map()来高效地完成这项任务。

array.slice(s, e)将获取从s开始直到e之前的数组部分。因此,您可以首先切片该数组,然后映射该切片并对每个子数组进行切片。例如,要获取行索引1到2(包括)和列索引2到3的部分,您可以执行以下操作:

let array = [
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9, 10, 11, 12],
  [13, 14, 15, 16]
]
let sx = 1
let ex = 2
let sy = 2
let ey = 3

let section = array.slice(sx, ex + 1).map(i => i.slice(sy, ey + 1))
console.log(section)


上面的代码将在Google Apps Script中引发错误,应该是JavaScript兼容的...为什么呢?冒犯的行let section = array.slice(sx, ex + 1).map(i => i.slice(sy, ey + 1)),特别是看起来问题出在.map函数上...也许是i=> i.slice - Riccardo
@Riccardo在V8中对我很好用。我正在使用let sheetArr = sheet.getDataRange().getValues();,然后使用let section = sheetArr.slice(start_row, end_row + 1).map(i => i.slice(start_col, end_col + 1)); - ScrapeHeap
是的,V8兼容ECMA脚本。 - Riccardo
1
非常好,但是X轴和Y轴混淆了,应该是: let section = array.slice(sy, ey + 1).map(i => i.slice(sx, ex + 1)); - Shrike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接