2

Is there a neat way to destructure a 2D array to assign a variable to each column?

For example:

const matrix = [
  [1,2,3,4,5],
  [1,2,3,4,5],
  [1,2,3,4,5]
]

const [ones, twos, threes, fours, fives] = foo(matrix);

console.log(ones);
// [1, 1, 1]
console.log(twos);
// [2, 2, 2]
etc.

Cheers,

P

Batters
  • 729
  • 1
  • 7
  • 19

3 Answers3

0

Copied transpose method from hobs answer

const matrix = [
  [1,2,3,4,5],
  [1,2,3,4,5],
  [1,2,3,4,5]
]
function transpose(a) {
return Object.keys(a[0]).map(function(c) {
    return a.map(function(r) { return r[c]; });
});
}
const [ones, twos, threes, fours, fives] = transpose(matrix);
console.log('ones', ones);
sridhar..
  • 1,945
  • 15
  • 19
0

You need to transpose the matrix first.

const
    transpose = array => array.reduce((r, a) => a.map((v, i) => [...(r[i] || []), v]), []),
    matrix = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]],
    [ones, twos, threes, fours, fives] = transpose(matrix);

console.log(ones);
console.log(twos);
console.log(threes);
console.log(fours);
console.log(fives);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

const matrix = [
  [1,2,3,4,5],
  [1,2,3,4,5],
  [1,2,3,4,5]
]

function foo(matrix) {
  let columns = []
  for(const i in matrix) {
    for(const j in matrix[i]) {
      columns[j] = columns[j] || []
      columns[j].push(matrix[i][j])
    } 
  }
  return columns
}

const [ones, twos, threes, fours, fives] = foo(matrix);

console.log(ones);
// [1, 1, 1]
console.log(twos);
// [2, 2, 2]
Callam
  • 11,409
  • 2
  • 34
  • 32