ES6-映射/迭代器支持声明式编程吗



向下投票是可以的,但至少让我知道你为什么考虑这样做。

我有学习的热情,想看看是否有其他解决方案,这就是为什么我在预研中问这个问题

我正在将一些"在运行时存储数据"的现有代码从"Object"重构为"Map"(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]) } )

很明显,人们理解在做下一步之前应该"过滤"什么。

然而,对于"Map",值的验证似乎只能通过新迭代中的forEachvalues来完成。

例如,

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

问题:

if是否是处理"Map"中undefined值的唯一方法?

您要问的是"映射/迭代器支持声明式编程吗?">

目前,您所需的内容没有本机支持。你可以在这里看到一些关于它们的讨论。


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

a。只需使用if else语句

这不是一个糟糕的选择,但有些人只是觉得这会扰乱他们的情绪。

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

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

c。添加您自己的filtermap方法

Mapiterator上,并实际扩展对象(通常不鼓励(,或者使用的函数将其作为自变量。也许可以看看这个堆栈溢出的答案,或者寻找一些库来寻找一些想法(也许wu.js会有所帮助?(。

d。不要使用地图

这并不是一个真正的"选项",但这肯定是一些人得出的结论,所以我想我会列出它,因为他们只是觉得他们已经习惯了地图(还(不支持的流量。

最新更新