我正在处理的问题遍历数组,但是根据我在数组中的位置具有三种不同的行为: 1.最后一个元素:执行A; 2.倒数第二个元素:做B; 3.所有其他元素:C。
为了确定我的位置,我使用了if语句,并注意到当我仅使用索引[-1]和[-2]时,if语句的计算结果不符合预期。为什么?
for(let i = 0; i < arr.length; i++){
if (arr[i] === arr[arr.length-1]){console.log(`last itme`)} // This one evaluates i to be equal to the last item in the array when i is length-1
if (arr[i] === arr[-1]){console.log(`last itme`)} // This one *does not* evaluates i to be equal to the last item in the array when i is length-1
}
很抱歉,如果这是重复的内容-我做了搜索,找不到类似的东西。谢谢!
答案 0 :(得分:1)
JS中的数组索引定义为
仅当
P
等于ToString(ToUint32(P))
并且P
不等于ToUint32(P)
时,字符串属性名称2^32-1
是数组索引。 / p>
(实际上是指[0; 2^32-1)
范围内的整数)
因此像-1
这样的负索引虽然有用,但根本不存在。
参考文献:
答案 1 :(得分:0)
因为数组索引从0开始。在JS中,像-1或-2这样的值不是有效的索引。
(也许您具有pythonic背景,因为这在python中意味着某些东西。)
答案 2 :(得分:0)
实际上,将if语句移出循环是有意义的,就像您当前的代码一样,使用类似以下数组的行为会很有趣:
[1, 1, 1, 1]
,因为它将一直输入两个ifs。因此,您可以这样做:
if(arr.length > 0) {
const last = arr[arr.length - 1];
//...
}
if(arr.length > 1) {
const second = arr[arr.length - 2];
//...
}
for(const rest of arr.slice(0, -2)) {
//...
}