且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Javascript:使用reduce() 查找最小值和最大值?

更新时间:2023-02-26 19:59:24

诀窍在于提供一个空数组作为初始值参数

arr.reduce(callback, [initialValue])

initialValue [可选] 用作第一个参数的值回调的第一次调用.如果未提供初始值,则第一个将使用数组中的元素.

所以代码看起来像这样:

function minMax(items) {返回 items.reduce((acc, val) => {acc[0] = ( acc[0] === undefined || val < acc[0] ) ?价值:acc[0]acc[1] = ( acc[1] === undefined || val > acc[1] ) ?价值:acc[1]返回acc;}, []);}

I have this code for a class where I'm supposed to use the reduce() method to find the min and max values in an array. However, we are required to use only a single call to reduce. The return array should be of size 2, but I know that the reduce() method always returns an array of size 1. I'm able to obtain the minimum value using the code below, however I don't know how to obtain the max value in that same call. I assume that once I do obtain the max value that I just push it to the array after the reduce() method finishes.

/**
 * Takes an array of numbers and returns an array of size 2,
 * where the first element is the smallest element in items,
 * and the second element is the largest element in items.
 *
 * Must do this by using a single call to reduce.
 *
 * For example, minMax([4, 1, 2, 7, 6]) returns [1, 7]
 */
function minMax(items) {
     var minMaxArray = items.reduce(
        (accumulator, currentValue) => {
             return (accumulator < currentValue ? accumulator : currentValue);
        }
    );

     return minMaxArray;
 }

The trick consist in provide an empty Array as initialValue Parameter

arr.reduce(callback, [initialValue])

initialValue [Optional] Value to use as the first argument to the first call of the callback. If no initial value is supplied, the first element in the array will be used.

So the code would look like this:

function minMax(items) {
    return items.reduce((acc, val) => {
        acc[0] = ( acc[0] === undefined || val < acc[0] ) ? val : acc[0]
        acc[1] = ( acc[1] === undefined || val > acc[1] ) ? val : acc[1]
        return acc;
    }, []);
}