Есть ли способ сопоставить элементы массива с параметрами функции в машинописи напрямую? - PullRequest
0 голосов
/ 23 мая 2018

Я часто сталкиваюсь с ситуацией, когда я получаю массив с аргументами, и мне приходится вручную разбивать массив на части.Например,

Observable.combineLatest(obs1$, obs2$, obs3$).subscribe((data) => {
  let fancyArg = data[0];
  let epicArg = data[1];
  let wonderfulArg = data[2];
})

Есть ли ярлык, чтобы сделать что-то подобное

Observable.combineLatest(obs1$, obs2$, obs3$)
  .subscribe([fancyArg, epicArg, wonderfulArg] => { //something like this
    ...                                             //would be great
  })

Я знаю, что есть опция с последним аргументом в качестве функции

Observable.combineLatest(obs1$, obs2$, obs3$, 
  (arg1, arg2, arg3) => {
    return {
      fancyArg:arg1, 
      epicArg:arg2, 
      wonderfulArg:arg3
    }
  })
  .subscribe((args) => {
    ...
  })

но это тоже очень неудобно.Я ищу более общий подход (чтобы использовать его также с помощью bindCallback и других функций)

1 Ответ

0 голосов
/ 23 мая 2018

Javascript имеет деструктурирующее назначение , которое вы можете использовать в своем списке параметров для распаковки массива.Пример:

function takeAnArray([firstItem, secondItem, thirdItem]) {
  console.log(firstItem, secondItem, thirdItem);
}

takeAnArray([1, "a", false]);

Итак, вы были почти правы в своем втором фрагменте.Вам просто нужно добавить пару круглых скобок вокруг списка аргументов:

Observable.combineLatest(obs1$, obs2$, obs3$)
  .subscribe(([fancyArg, epicArg, wonderfulArg]) => {
    // Here, fancyArg is the first array element,
    // epicArg is the second
    // wonderfulArg is the third
  })

Документация для combineLatest даже показывает этот синтаксис в своем первом примере.

...