如果我们得到类似的东西
array=[5,5,5,5,3,2];
return Math.max.Apply(Math,array);
如果发生这种情况,如何让它从头到尾返回数字。
要回答标题中的问题:
如果数组有几个同样大的数字,max()函数在javascript中做什么
答案是,没有。 Math.max()不对数组起作用。
您可以通过将项目作为参数传播到max()
来传递数组:
Math.max(...[1,2,3]) // 3
或者正如你所见,使用apply()
:
Math.max.apply(Math, [1,2,3]) // 3
如果问题更多:
当给出多个相同的最大数时,Math.max()会做什么?
答案是,它返回这个数字:
const a = [5, 5, 5, 5, 3, 2]
const max = Math.max(...a)
console.log(max) // 5
这个问题令人困惑:
如果发生这种情况,如何让它从头到尾返回数字。
你想让它返回一个排序的数组?从[5, 5, 5, 5, 3, 2]
到[2, 3, 5, 5, 5, 5]
?
a.sort() // [2, 3, 5, 5, 5, 5]
你想删除欺骗?从[5, 5, 5, 5, 3, 2]
到[2, 3, 5]
?
Array.from(new Set(a)) // [2, 3, 5]
你能澄清一下你的问题吗?
最好的方法是:
var a = [5,5,5,5,3,2];
var largest = Math.max.apply(null,a)
var filtered = a.filter(function(item) {
item === largest
});
过滤将包含所有最大元素。
在@ Clarkie的例子中,他比不需要更频繁地调用Math.max。在Dan和Clarkie的例子中,他们正在大写Apply,这是不正确的,正确的调用函数是Math.max.apply
,Math不需要作为第一个参数传入。
有关工作示例,请参阅以下内容:
修改@ Clarkie的好主意。我们可以把它归结为......
var a = [5,5,5,5,3,2],
m = Math.max(...a),
f = a.filter(e => e == m);
document.write("<pre>" + JSON.stringify(f) + "</pre>");