I need to generate a multidimensional array from a multidimensional array.
For example, my array:
var codes = [
['2', '12521'],
['3', '32344'],
['3', '35213'],
['4', '42312'],
['4', '41122'],
['5', '51111']
];
And my new array should have this structure:
[0] => Array
(
[0] => Array
(
[0] => '2'
[1] => '12521'
}
)
[1] => Array
(
[0] => Array
(
[0] => '3'
[1] => '32344'
}
[1] => Array
(
[0] => '3'
[1] => '35213'
}
)
[2] => Array
(
[0] => Array
(
[0] => '4'
[1] => '42312'
}
[1] => Array
(
[0] => '4'
[1] => '41122'
}
)
...
I have been trying to use for looping to populate the new array but have been struggling to do it. Please help. Thanks!
asked Nov 21, 2019 at 7:33
hatched
8752 gold badges12 silver badges47 bronze badges
1 Answer 1
You could use a simple reduce() operation that keeps track of the current value you're basing your grouping on:
const codes = [
['2', '12521'],
['3', '32344'],
['3', '35213'],
['4', '42312'],
['4', '41122'],
['5', '51111', '']
];
const output = codes.reduce(({result, current}, [x, ...y]) => {
if (current !== x) result.push([]);
result[result.length - 1].push([x, ...y]);
return {result, current: x};
}, {result: []}).result;
console.log(output);
answered Nov 21, 2019 at 7:42
Robby Cornelissen
98.6k23 gold badges154 silver badges180 bronze badges
Sign up to request clarification or add additional context in comments.
3 Comments
hatched
Thanks for the solution! How do I modify the codes if I have more elements in each array of
codes array ?Robby Cornelissen
Updated the answer to allow for more elements.
hatched
I'm not sure why the output return me the exactly same row of array to me , my real data has 5 elements in a single array , such as
['R', '2' , '115' , 'AB' ,'117'],lang-js
forlooping..." - You've forgotten to post the relevant code.2,3,4,5