2013-12-10 2 views
0

У меня есть функция снижения как это:Как переименовать «_arg» в аргумент деструктивной функции?

ops = rqOps.reduce (p, { commit: id: cid, type: type }, idx, arr) -> 
    # Do stuff here 
    p 
, {} 

, который прекрасно работает, но теперь имя второго аргумента компилирует _arg. Как я могу назвать его другим именем? Я пробовал несколько разных подходов, таких как arg = { commit: id: cid, type: type } и { commit: id: cid, type: type } : arg и { commit: id: cid, type: type } = arg, но ничто не компилируется с предполагаемым результатом. Что не так с моим синтаксисом?

ответ

2

Почему вам небезразличен второй аргумент? Ваш деструктурирующий объект означает, что вы не будете работать с этим аргументом вообще, вы бы просто работали с cid и type. Имя _arg и даже его существование могут быть изменены, и ни один из ваших дел.

Например, если у вас есть это:

rqOps = [ 
    { commit: { id: 1, type: 2 } } 
    { commit: { id: 2, type: 4 } } 
] 
ops = rqOps.reduce (p, { commit: id: cid, type: type }, idx, arr) -> 
    console.log(cid, type) 
    p 
, { } 

, то вы получите 1, 2 и 2, 3 в консоли. Если вам нужен весь второй аргумент, дайте ему имя и распакуйте его внутри функции итератора:

ops = rqOps.reduce (p, arg, idx, arr) -> 
    { commit: id: cid, type: type } = arg 
    #... 
+0

Ваш последний блок заменяет '_arg' на' arg'. В компилируемом коде нет другой разницы. – hpaulj

+0

@hpaulj: Извините, неправильно прочитайте свой комментарий в первый раз, мои глаза видели «не», а не «делает». –

+0

Я хочу ссылаться на второй аргумент, потому что я только хочу разрушить некоторые его свойства. Что делать, если объект имеет 100 свойств, и я хочу уничтожить только 2 из них, имея доступ к другим? – zakdances