【问题标题】:Can someone please explain the following javascript code snippets? (NOOB)有人可以解释以下 javascript 代码片段吗? (小白)
【发布时间】:2018-05-01 03:38:53
【问题描述】:

代码是程序的一部分,它返回数组中的最大数。有人可以解释以下内容吗?谢谢

  if (parseInt(nums[0]) < parseInt(nums[1])) { nums.splice(0,1); }
        else { nums.splice(1,1); }

【问题讨论】:

  • 它正在删除较小的值...除非您在数组[4.999, 4] 上尝试此操作会失败,因为这些值被解释为整数。所以这不是很好的代码。它还修改了数组以获得聚合值,这也是不好的做法。

标签: javascript arrays


【解决方案1】:

基本是了解.splice doesMDN

因此它将根据传递的参数通过删除一个项目来修改您的数组

数组.拼接(start[, deleteCount[, item1[, item2[, ...]]]])

var nums = ["2", 4];

if (parseInt(nums[0]) < parseInt(nums[1])) {
   nums.splice(0,1);    // At index 0 remove 1 item
} else { 
   nums.splice(1,1);    // At index 1 remove 1 item
}

console.log( nums )     // Modified array

PS:

  • 如您所见,该代码仅适用于长度为 2 的数组;它只比较 0 和 1 索引:nums[0] nums[1]
  • 如果您的数组是 [1, 1](相同的值)- 什么都不会发生。
  • 如果您的数组是[1.9, 1] - 将返回[1],因为您使用的是parseInt
  • radixparseInt(value, radix) 一起使用是个好习惯,比如parseInt(nums[0], 10)

【讨论】:

  • @gman 没有。以问题中的sn-p为例,对副作用的描述准确而全面。当链接中有非常好的文档时,无需解释该函数在这里没有做的事情。
【解决方案2】:

既然你写了 NOOB,我认为说清楚很重要。

splice 方法从数组中指定索引处删除 0 个或多个项目,并在该索引处插入 0 个或多个项目。

签名是someArray.splice(startNdx, deleteCount[, ...itemsToInsert])

在您发布的代码中,这部分

nums.splice(0,1);

从索引 0 开始并从数组中删除 1 个元素。换句话说,如果数组是[5, 6, 7],它将变为[6, 7]

nums.splice(1,1);

这部分从索引 1 开始,从数组中删除 1 个元素。换句话说,如果数组是[5, 6, 7],它将变成[5, 7]

parseInt 部分将字符串转换为整数,这表明数组包含字符串而不是数字(或者可能包含字符串)。假设数组确实包含字符串,那么如果没有 parseInt 部分,它将比较字符串而不是数字,这是一种不同类型的比较。由于您没有显示数组的内容,因此很难确切知道它要做什么,但例如

"00" < "0000"  

为真

parseInt("00") < parseInt("0000") 

不正确。同样

"000_bob" < "000_jill" is true

但是

parseInt("000_bob") < parseInt("000_jill") 

不正确

所以代码会检查第一个值是否小于第二个值,但它是通过整数而不是字符串进行比较。

其他人声称这是糟糕的代码,但在不知道它正在使用的上下文的情况下,它并不是糟糕的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2015-09-14
    • 2016-11-21
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多