Search code examples
javascriptarrays

Why is the spread operator needed for Math.max()?


function findLongestWordLength(str) {
let arr = str.split(' '); 
let lengths = arr.map(word => word.length);

console.log(Math.max(lengths));
}

findLongestWordLength("The quick brown fox jumped over the lazy dog");

console.log(Math.max(lengths)) results in NaN, console.log(Math.Max(...lengths)) works. Why does lengths need to be spreaded? Math.Max takes an array as its argument, & lengths is an array? Thanks


Solution

  • Math.max does not take an array. It takes a set of parameters. The spread operator provides all of the values of the array as individual parameters.

    Math.max(...lengths)
    

    is actually represented at runtime as:

    Math.max(lengths[0], lengths[1], etc, lengths[n])