【问题标题】:Is there a way to map array items to function parameters in typescript directly?有没有办法直接将数组项映射到打字稿中的函数参数?
【发布时间】:2018-11-01 18:40:54
【问题描述】:

我经常遇到这样一种情况,即我得到一个带参数的数组,并且必须手动将数组分成几部分。例如

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 和其他函数使用它)

【问题讨论】:

    标签: typescript rxjs rxjs5 typescript2.0


    【解决方案1】:

    Javascript 有destructuring assignment,您可以在参数列表中使用它来解压缩数组。示例:

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

    所以你在第二次 sn-p 中几乎是正确的。您只需要在参数列表周围添加一对括号:

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

    documentation for combineLatest 甚至在它的第一个示例中显示了这种语法。

    【讨论】:

    • 我尝试了很多变种。感谢您的快速回复;-) 有时当我不知道名字时,在搜索引擎上很难找到我
    • 不用担心。乐意效劳。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多