Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
199
rated 0 times [  200] [ 1]  / answers: 1 / hits: 15495  / 9 Years ago, sat, december 26, 2015, 12:00:00

The question is to use reduce() to operate on an array of arrays and return a homogeneous array with no sub-arrays.
Eg - [1,2,[3,[4,5]]] will return [1,2,3,4,5].



Here is code that works, considering the sub-array itself is not another array of arrays-



var a = [3,[4,[5,[6,7]]]];
var b = 8;
var c = [9,10];
var x = []

var arr = [1,2,a,b,c];
arr = [1,2,3,4,c];

console.log(arr.reduce(function oneArray(a,b)
{
return a.concat(b);
},x))


Notice that I change my arr array as the code does not work for the first arr array i.e [1,2,a,b,c].
For arr [1,2,3,4,c] the object returned is [1,2,3,4,9,10]



Here is my attempt to make it work for the first arr-



function oneArray(a,b)
{
if (typeof b == object)
b = b.reduce(oneArray(x,y),[]);
return a.concat(b);
}

console.log(arr.reduce(oneArray(a,b),x));


This gives me the error



Uncaught TypeError: [object Array] is not a function(anonymous function) @ Flattening.html:27



It interprets my function oneArray as an array not a function



I understand the problem comes from the fact that reduce can (I think) work only with a function defined as a parameter.
Does anyone have a solution so that I get [1,2,3,4,5,6,78,9,10] as my result working around the limitations of reduce() unless I missed something?


More From » arrays

 Answers
18

Reduce with a test for an array and a recursive call of the reduce function.



Edit: Kudos to Jonathan Lonowski for the hint.





function flat(r, a) {
if (Array.isArray(a)) {
return a.reduce(flat, r);
}
r.push(a);
return r;
}

var array = [3, [4, [5, [6, 7]]]];
document.write('<pre>' + JSON.stringify(array.reduce(flat, []), 0, 4) + '</pre>');




[#63939] Wednesday, December 23, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
cadendericki

Total Points: 482
Total Questions: 109
Total Answers: 103

Location: Ecuador
Member since Thu, Jun 4, 2020
4 Years ago
cadendericki questions
Wed, Apr 7, 21, 00:00, 3 Years ago
Wed, Jul 8, 20, 00:00, 4 Years ago
Thu, May 14, 20, 00:00, 4 Years ago
;