所以我有问题,我得到了这样的数组数组。
Array = [ [2,5,1], [1,23], [3], [22,16,8] ]
我必须根据数组中的最大值从最小到最大来排序子数组。所以顶部数组变为:
[ [3], [2,5,1], [22,16,8], [1,23] ]
我必须创建两个函数,一个用于查找数组的最大值,另一个用于以下方法。
x.sort(method)
会得到上面的答案。
我创建了一个方法来查找数组中的最大值。
function fidMax(array){
copy = array.sort(function(a,b){return a-b})
return copy[copy.length-1]
}
它只是对数组进行排序,并返回最后一个元素。
现在我想制作第二种使用reduce的方法。
function compare(array){
array.reduce(findMax)
}
我有,但它不起作用,它甚至不会编译,我不知道为什么。我必须在findMax()
方法中使用compare()
方法,而compare()
方法必须使用reduce()
。
关于该怎么做的任何想法?
感谢。
答案 0 :(得分:2)
排序会改变数组,可能不是你想要做的。我不会为你做整个练习,但我可以帮助你使用reduce
找到数组中的最大值。
> const foo = [3, 5, 2];
undefined
> foo.reduce((max, currentValue) => Math.max(max, currentValue))
5
答案 1 :(得分:0)
我必须在
findMax
方法中使用compare
方法,而compare
方法必须使用reduce
。
鉴于这些规范,唯一可行的解决方案效率极低,因为它不会在排序之前预先计算每个子数组的max
,但无论如何,这里是:
function compare(a, b) {
return a.reduce(findMax, 0) - b.reduce(findMax, 0)
}
function findMax(max, curr) {
return Math.max(max, curr)
}
var x = [ [2,5,1], [1,23], [3], [22,16,8] ]
x.sort(compare)
console.log(JSON.stringify(x))
现在,这只适用于所有子数组都包含非负整数的情况。如果您还必须使用负整数排序,建议您使用0
替换每个.reduce()
来电的第二个参数中的-Infinity
。