Javascript 需要对这段代码进行解释吗

Javascript 需要对这段代码进行解释吗,javascript,Javascript,我遇到了一些我无法理解的代码 arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length); 我知道“?”可以被认为是“then”,而“:”可以被认为是else。我特别不明白这个位arr.length,arr.length的意思。如果你能解释给我听我会很感激的 以下是完整上下文中的代码: 函数dropElements(arr,func){ 返回arr.slice(arr.findInd

我遇到了一些我无法理解的代码

arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func): arr.length, arr.length);
我知道“?”可以被认为是“then”,而“:”可以被认为是else。我特别不明白这个位
arr.length,arr.length
的意思。如果你能解释给我听我会很感激的

以下是完整上下文中的代码:

函数dropElements(arr,func){
返回arr.slice(arr.findIndex(func)>=0?arr.findIndex(func):arr.length,arr.length);
}
//在这里测试
var result=dropElements([1,2,3,4],函数(n){returnn>=3;});
console.log(结果)
如果我们将其分解:
arr.slice(arr.findIndex(func)>=0?arr.findIndex(func):arr.length,arr.length)我们将得到:
arr.slice(开始,结束)
where

begin=arr.findIndex(func)>=0?arr.findIndex(func):arr.length
end=arr.length

因此,如果我们分解它,它将从
开始
到给定数组的结尾

arr.slice(arr.findIndex(func)>=0?arr.findIndex(func):arr.length,arr.length)我们将得到:
arr.slice(开始,结束)
where

begin=arr.findIndex(func)>=0?arr.findIndex(func):arr.length
end=arr.length


因此,这将从
开始
到给定数组的结尾进行切片

当您需要解释代码时,这可能是它写得不好的迹象。至少像这样的一句话需要一个注释来解释

<> P>改为重写:

function dropElements(arr,func) {
    var start = arr.findIndex(func);
    if( start < 0) {
        // no match
        return [];
    }
    else {
        return arr.slice(start);
    }
}
函数dropElements(arr,func){
var start=arr.findIndex(func);
如果(开始<0){
//没有对手
返回[];
}
否则{
返回arr.slice(开始);
}
}

请注意,第二个
arr.length
是冗余的-
.slice()
将切片到数组的末尾(如果没有另外指定)。

当您需要解释代码时,它可能是写得不好的标志。至少像这样的一句话需要一个注释来解释

<> P>改为重写:

function dropElements(arr,func) {
    var start = arr.findIndex(func);
    if( start < 0) {
        // no match
        return [];
    }
    else {
        return arr.slice(start);
    }
}
函数dropElements(arr,func){
var start=arr.findIndex(func);
如果(开始<0){
//没有对手
返回[];
}
否则{
返回arr.slice(开始);
}
}
请注意,第二个
arr.length
是冗余的-
.slice()
将切片到数组的末尾,如果没有另外指定的话。

请这样想:

if(arr.findIndex(func) >= 0) {
    startI = arr.findIndex(func);
} else {
    startI = arr.length;
}
endI = are.length;
return arr.slice(startI, endI);
…这有帮助吗?基本上?..:的作用类似于if-else,那么整个参数后面跟着一个…,第二个参数。非常令人困惑,我讨厌人们不使用parens来澄清行动顺序。

这样想:

if(arr.findIndex(func) >= 0) {
    startI = arr.findIndex(func);
} else {
    startI = arr.length;
}
endI = are.length;
return arr.slice(startI, endI);
…这有帮助吗?基本上?..:的作用类似于if-else,那么整个参数后面跟着一个…,第二个参数。非常令人困惑,我讨厌人们不使用parens来澄清行动顺序。

试着停止:

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
因此,这段代码的作用是,开始从第一个三元运算符返回的数字到数组长度的数组切片。

尝试将其停止:

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
因此,这段代码的作用是,从第一个三元运算符返回的数字到数组的长度开始数组切片