2014-03-30 102 views
1

雖然我知道潑濺,我仍然無法十分把握從下面的代碼的最後一行:啪從數組刪除項目

class Borrowable extends Decorator 
    constructor: (@libraryItem) -> 

    removeBorrower: (borrower) -> 
    @borrowers[t..t] = [] if (t = @borrowers.indexOf(borrower)) > -1 

順便說一句,這個代碼是從https://github.com/aksharp/Design-Patterns/blob/master/CoffeeScript/Decorator.coffee

複製

我假設這是Destructuring Assignment,但我仍然無法理解幕後發生的事情。

你能幫忙澄清一下嗎?

回答

1

讓我們在最後一行仔細一看:

@borrowers[t..t] = [] if (t = @borrowers.indexOf(borrower)) > -1 

我不知道,如果這種形式算作解構賦值,大概是。

首先,它調用@borrowers.indexOf(borrower)來檢查borrower是否存在於@borrowers數組中,並獲取其索引。

通常使用borrower in @borrowers而不是@borrowers.indexOf(borrower) > -1,但在這種情況下,我們還需要索引元素。

如果borrower存在於@borrowers,它得到索引tt

@borrowers[t..t] 

之間的@borrowers陣列是[borrower]的一部分,並且將其分配給空數組[],從而去除borrower@borrowers數組。

這是這個任務的JS樣相當於:

@borrowers.splice t, 1