我正在做一些w3编码练习,一个例子就是这样:
return array.slice(Math.max(array.length - n, 0));
Math.max的目的是什么?我知道它给出了给定参数(length -n , 0)
的最大值。但是,混淆为什么你不能只使用array.length - n
?
答案 0 :(得分:4)
此处的Math.max
为您提供array.length - n
和 0的更多内容。
array.length - n
可能小于0.使用负数可能会导致.slice
给您带来意外结果。
因此,您可以保证永远被退回" good"号。
答案 1 :(得分:0)
如果n
大于array.length
,则返回的结果将为否定。通过说返回此减法的较大值和零,您确保永远不会返回负数。
答案 2 :(得分:0)
Math.max返回其参数中的最大值。在这种情况下,看起来0是默认值,并且作者想要过滤负值,因为n
可能大于array.length。
答案 3 :(得分:0)
此代码生成一个新数组,其n
个最后一个元素为arr
。
但是,n
可能大于数组的长度。在这种情况下,Math.max
会确保使用slice
而不是负数来调用0
。
这可能会有问题,因为当使用负数调用slice
时,它会将数组的长度添加到其中。
例如,
var array = [1, 2, 3],
n = 4;
array.slice(array.length - n); // [3]
array.slice(Math.max(array.length - n, 0)); // [1, 2, 3]
请注意,只有l < n < 2 l
才有问题,其中l
是数组的长度。
n <= l
,则l - n >= 0
。 Math.max
和n >= 2 l
,则n > 0
。因此,l - n <= -n/2 < 0
将总计slice
,但l
仍然不是正数。然后2 l - n
将使用slice
。 0
,则Math.max
。 n = 2 l = 0
,则l - n = 0
。因此,Math.max
会将l < n < 2 l
和l - n < 0
相加。问题!需要slice
。答案 4 :(得分:0)
由于我们不知道<style>
的上下文,Ctrl + V
可能大于Cmd + V
。例如,如果数组的长度为n
,则n
可能为array.length
。现在,当4
的论点严格为负时,就会发生一件奇怪的事情:
n
(使用5
,一个JavaScript shell)
如果参数为.slice
,则会保留最后$ node
> x=[1,2,3,4]
[ 1, 2, 3, 4 ]
> x.slice(-1)
[ 4 ]
项。这可能是不希望的行为。因此,使用node
一个确保参数为正,并且没有项被删除或第一个 l 被删除, l 为-k
。