在array.slice的上下文中Math.max的目的是什么

时间:2016-01-03 22:41:20

标签: javascript arrays

我正在做一些w3编码练习,一个例子就是这样:

return array.slice(Math.max(array.length - n, 0));

Math.max的目的是什么?我知道它给出了给定参数(length -n , 0)的最大值。但是,混淆为什么你不能只使用array.length - n

5 个答案:

答案 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
  • 。{/ 1}}
  • 如果Math.maxn >= 2 l,则n > 0。因此,l - n <= -n/2 < 0将总计slice,但l仍然不是正数。然后2 l - n将使用slice
  • 。{/ 1}}
  • 如果0,则Math.max
  • 。{/ 1}}
  • 如果n = 2 l = 0,则l - n = 0。因此,Math.max会将l < n < 2 ll - 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