ES6-地图/迭代器是否支持声明式编程?

时间:2018-08-06 02:47:11

标签: javascript ecmascript-6

可以投票,但至少让我知道您为什么这样做。

我热衷于研究是否有替代解决方案,这就是为什么我在进行预研究时问了这个问题。

我正在重构一些现有的代码,这些代码将“在运行时存储数据”从“对象”转换为“地图”(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/)。

目标是在不返回结果的情况下处理给定的运行时数据。

由于filtermap可以应用于Object.keys,因此开发人员很容易理解流程中的逻辑。

旧代码示例

Object.keys(givenObj)
    .filter(key => { return typeof givenObj[key] === 'string' && givenObj[key] !== undefined })
    .map( key => { processData(givenObj[key]) } )

很明显,人们在执行下一个步骤之前就已经了解了应该“过滤”的内容。

但是,使用“地图”,似乎只能在新的迭代中通过forEachvalues来完成值的验证。

例如

givenMap.forEach( (value, key) => { 
    if ( typeof value !== 'string' || value === undefined ){ 
       invalidHandling(key)
    } else {
       processData(value)
    } 
})

问题:

if是否是处理“地图”中的undefined值的唯一方法?

1 个答案:

答案 0 :(得分:1)

您要问的是“地图/迭代器是否支持声明式编程?”

当前,您想要的内容没有本地支持。您可以看到有关将其包含here的一些讨论之一。


我看到人们采取的四个选择是:

a。只需使用if else语句

这不是一个不好的选择-但是有些人只是觉得它干扰了他们的流程。

b。转换为数组,然后返回。

这显然不是性能最高或最干净的解决方案。

c。添加自己的filtermap方法

要么在Map上,要么在iterator上,或者实际上扩展对象(通常不鼓励),或者使用函数将其作为参数。也许请查看this stack overflow answer或寻找一些库以获取一些想法(也许wu.js可以帮助您?)。

d。不要使用地图

每个人说的并不是一个“选项”,但肯定可以得出结论,因此,尽管我将其列出来,因为他们只是觉得他们已经习惯了Google Maps不支持的流程( )。