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