有人可以解释下面的javascript代码片段吗? (菜鸟)

时间:2018-05-01 03:38:53

标签: javascript arrays

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

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

2 个答案:

答案 0 :(得分:3)

基本是了解.splice doesMDN

因此,根据传递的参数删除项目修改您的数组

  

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

&#13;
&#13;
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
&#13;
&#13;
&#13;

PS:

  • 正如您所注意到的,该代码仅适用于长度为2的数组;它只比较0和1索引:nums[0] nums[1]
  • 如果你的数组是[1, 1](相同的值) - 什么都不会发生。
  • 如果您的数组为[1.9, 1] - [1]将被退回,因为您正在使用parseInt
  • parseInt(value, radix) parseInt(nums[0], 10)一样使用 radix 的好习惯<{1}}

答案 1 :(得分:1)

既然你写了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") 

不是真的

因此代码检查第一个值是否小于第二个值,但它是按整数而不是字符串进行比较。

其他人声称这是错误的代码,但如果不知道正在使用它的上下文,那么代码也不错。