简体   繁体   English

根据 JavaScript 中定义的长度将一维数组切片/转换为二维数组

[英]Slice/convert 1D array to 2D array based on defined length in JavaScript

I have 1D pointer array like below:我有如下所示的一维指针数组:

 Darray = [{x: 334, y: 400.5}, {x: 237, y: 389},{x: 149, y: 387.5},{x: 55, y: 379.5},{x: 210, y: 301.5},{x: 48, y: 295.5},{x: 378.5, y: 224.5},{x: 283, y: 217.5},{x: 121.5, y: 211.5},{x: 198.5, y: 211.5},{x: 42.5, y: 201},{x: 33, y: 134},{x: 364, y: 142},{x: 268.5, y: 137},{x: 192, y: 136.5},{x: 106, y: 131.5},{x: 263.5, y: 68},{x: 182.5, y: 63.5},{x: 102.5, y: 61.5},{x: 344.5, y: 65.5},{x: 32, y: 52}] //console.log(Darray) const points = Darray.slice(); points.sort((a, b) => ay - by); console.log(points)

I want to convert this 1D array into 2D array based on the array row length.我想根据数组行长度将此一维数组转换为二维数组。 For example,例如,

row_length = [5, 5, 5, 2, 4]
new_Darray = [[element[1,1],element[1,2], element[1,3], element[1,4], element[1,5],
             [element[2,1],element[2,2], element[2,3], element[2,4], element[2,5],
             [element[3,1],element[3,2], element[3,3], element[3,4], element[3,5],
             [element[4,1],element[4,2],
             [element[5,1],element[5,2], element[5,3], element[5,4], element[5,5]]

Here, element[i] represents {x:someValue, y:someValue} Sorry, if I wrongly represented anything.在这里,element[i] 表示{x:someValue, y:someValue}对不起,如果我错误地表示了什么。 Any help will be highly appreciated.任何帮助将不胜感激。

Using map , slice and temp variable, can be simplified to one-liner使用mapslice和 temp 变量,可以简化为一行

 const Darray = [ { x: 334, y: 400.5 }, { x: 237, y: 389 }, { x: 149, y: 387.5 }, { x: 55, y: 379.5 }, { x: 210, y: 301.5 }, { x: 48, y: 295.5 }, { x: 378.5, y: 224.5 }, { x: 283, y: 217.5 }, { x: 121.5, y: 211.5 }, { x: 198.5, y: 211.5 }, { x: 42.5, y: 201 }, { x: 33, y: 134 }, { x: 364, y: 142 }, { x: 268.5, y: 137 }, { x: 192, y: 136.5 }, { x: 106, y: 131.5 }, { x: 263.5, y: 68 }, { x: 182.5, y: 63.5 }, { x: 102.5, y: 61.5 }, { x: 344.5, y: 65.5 }, { x: 32, y: 52 }, ]; const points = Darray.slice(); points.sort((a, b) => ay - by); // console.log(points); const row_length = [5, 5, 5, 2, 4]; let last = 0; const output = row_length.map((len) => points.slice(last, (last += len))); console.log(output);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM