2016-10-07 109 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 

那麼,這代碼確實是,啓動陣列從返回的數字切片從第一個三元運算符到數組長度。