简体   繁体   中英

Javascript looping through arrays of arrays

So I've been fighting with this a few hours now- the goal is to create a new array of the highest numbers in each array of 4. However, I can't seem to get it to loop more than once. How am I screwing up this for loop?

 function largestOfFour(arr) { for (var i = 0; i < arr.length; i++) { var allTop = ""; var top = arr[i].sort(function(a, b) { return b - a; }); i++; allTop.push(top[0]); } } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 

A better approach is using the function map along with the function Math.max

 function largestOfFour(arr) { return arr.map(function(a) { return Math.max.apply(null, a); }); } var result = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); console.log(result); 

Full ES6:

 var largestOfFour = (arr) => arr.map(a => Math.max(...a)); var result = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); console.log(result); 

The variable allTop should be defined before the loop as an array, and returned after the loop ends:

 function largestOfFour(arr) { var allTop = []; for (var i = 0; i < arr.length; i++) { var top = arr[i].sort(function(a, b) { return b - a; }); allTop.push(top[0]); } return allTop; } console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])); 

Try this:

function largestOfFour(arr) {
  let allTop = [];
  arr.forEach(a => {
    allTop.push(Math.max.apply(Math, a));
  });
  return allTop;
}

console.log(
  largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])
);

Other solution would be to use function reduce along with the function Math.max

 function largestOfFour(arr) { return arr.reduce((a, x) => { a.push(Math.max.apply(null,x)); return a; }, []); } console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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