将2D阵列切割成较小块的阵列'或者' chunks'

时间:2017-10-31 19:57:37

标签: javascript multidimensional-array

我的问题几乎就是发布here的问题,但是我的问题被归结为JS的准系统Rhino实现,所以我没有像Numpy这样的工具。

我有一个看起来像这样的数组(向下扩展任意数量):

[[ A, B, 1, 2, α, β],
 [ C, D, 3, 4, θ, μ],
 [ E, F, 5, 6, ω, ξ]

我希望将水平切片/拼接成“chunkified”'数组X元素厚;让我们说我需要2块厚的块:

[[[A, B],     [[1, 2],     [[α, β],
  [C, D],      [3, 4],      [θ, μ],
  [E, F]],     [5, 6]],     [ω, ξ]]]

我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

arr = [ [ 'A', 'B', 1, 2, 'α', 'β' ],
        [ 'C', 'D', 3, 4, 'θ', 'μ' ],
        [ 'E', 'F', 5, 6, 'ω', 'ξ' ] ], l = console.log, j = JSON.stringify
        
l(j( arr[0].slice(2, 4) ))           // "[1,2]" - slice can be used to get part of array
l(j( arr.map(a => a.slice(2, 4)) ))  // "[[1,2],[3,4],[5,6]]" - map + slice to get part of each sub-array

result = [0, 2, 4].map(i => arr.map(a => a.slice(i, i+2)))  // map over the indexes to split by to get the parts

l(j( arr )), l(j( result ))

答案 1 :(得分:1)

尝试这种方式:



var initialArray = [[ 'A', 'B', 1, 2, 'α','β'],
                    [ 'C', 'D', 3, 4, 'θ', 'μ'],
                    [ 'E', 'F', 5, 6, 'ω', 'ξ']];
 
 function convertArray(array){
 	var convertedArray = [];
 
  var length = array.length;
 	for (var i = 0; i < length; i++){
  	var rowArray = [];
    var colArray = [];
    var innerLength = array[i].length;
    for (var j = 0; j < innerLength; j++){
   		 colArray.push(array[i][j]);
      if ((j + 1) % 2 === 0){
          rowArray.push(colArray);
          colArray = [];
      }
    	
    }  	
    convertedArray.push(rowArray);
  }
  return convertedArray;
 }
 
 var newArray = convertArray(initialArray);
 console.log(newArray)
&#13;
&#13;
&#13;

这是一个快速解决方案。