2016-10-07 153 views
0

我遇到了一些我无法理解的代码。需要对此位代码的解释

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)

回答

2

当你需要编写代码解释的目的,它可以是它写的不好的迹象。至少像这样的一条线需要解释它的评论。

相反,考虑重写:

function dropElements(arr,func) { 
    var start = arr.findIndex(func); 
    if(start < 0) { 
     // no match 
     return []; 
    } 
    else { 
     return arr.slice(start); 
    } 
} 

注意,第二arr.length是多余的 - 如果不是另有规定.slice()将切片到数组的末尾。

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.lengthend = arr.length

所以,这是怎么回事,从begin切给定数组中

1

把它看成是这样的:

if(arr.findIndex(func) >= 0) { 
    startI = arr.findIndex(func); 
} else { 
    startI = arr.length; 
} 
endI = are.length; 
return arr.slice(startI, endI); 

...有何帮助?基本上......?:表现得像一个其他的,然后整个论点后面跟着......第二个论点。非常混乱,当人们不使用parens来阐明操作顺序时,我讨厌它。

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 

那么,这代码确实是,启动阵列从返回的数字切片从第一个三元运算符到数组长度。