我遇到了一些我无法理解的代码。
arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);
我知道"?"可以被认为是"然后"和":"除此之外。我特别不明白这一点arr.length, arr.length
的意思。如果你能向我解释一下,我会感激不尽
这是完整上下文中的代码:
function dropElements(arr, func) {
return arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);
}
// test here
var result = dropElements([1, 2, 3, 4], function(n) {return n >= 3;});
console.log(result)

答案 0 :(得分:2)
当你需要代码解释时,它可能是一个很难写的标志。至少这样的一行需要一个解释它的评论。
相反,请考虑重写:
function dropElements(arr,func) {
var start = arr.findIndex(func);
if( start < 0) {
// no match
return [];
}
else {
return arr.slice(start);
}
}
请注意,第二个arr.length
是冗余的 - 如果没有另外指定,.slice()
将切换到数组的末尾。
答案 1 :(得分:1)
这样想:
if(arr.findIndex(func) >= 0) {
startI = arr.findIndex(func);
} else {
startI = arr.length;
}
endI = are.length;
return arr.slice(startI, endI);
......这有帮助吗?基本上?...:表现得像if else,然后整个论证后跟一个......,第二个参数。非常混乱,当人们不使用parens澄清操作顺序时,我讨厌它。
答案 2 :(得分:0)
如果我们打破这个:
arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);
我们会得到:arr.slice(begin, end)
其中
begin = arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length
和
end = arr.length
因此,这将从begin
切换到给定数组的末尾
答案 3 :(得分:0)
尝试制动它:
arr.slice(
arr.findIndex(func) >= 0 ? arr.findIndex(func) : arr.length, // First argument for slice method
arr.length // Second slide argument.
);
现在让我们尝试分析一下slise的第一个参数:
arr.findIndex(func) >= 0 ? // If the call of arr.findIndex(func) it is greater than 0
arr.findIndex(func) : // Then return the result of this method call
arr.length // Other wise return the length of the arr
那么这段代码的作用是,从第一个三元运算符返回的数字开始数组切片到数组的长度。