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

Javascript ES6-映射/迭代器支持声明式编程吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,投反对票是可以的,但至少让我知道你为什么考虑这样做。 我有学习热情,想看看是否有其他解决方案,这就是为什么我在前期研究中提出这个问题。 我正在重构一些现有代码,将“在运行时存储数据”从“对象”重构为“映射”() 目标是在不返回结果的情况下处理给定的运行时数据。 由于filter和map可以应用于Object.keys,因此开发人员可以清楚地了解流程中的逻辑 旧代码示例 Object.keys(givenObj) .filter(key => { return typeof give

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

我有学习热情,想看看是否有其他解决方案,这就是为什么我在前期研究中提出这个问题。

我正在重构一些现有代码,将“在运行时存储数据”从“对象”重构为“映射”()

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

由于
filter
map
可以应用于
Object.keys
,因此开发人员可以清楚地了解流程中的逻辑

旧代码示例

Object.keys(givenObj)
    .filter(key => { return typeof givenObj[key] === 'string' && givenObj[key] !== undefined })
    .map( key => { processData(givenObj[key]) } )
很明显,人们在做下一步之前就应该理解哪些内容应该被“过滤”

然而,对于“Map”,值的验证似乎只能通过新迭代中的
forEach
values
来完成

比如说,

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

if
是否是处理“Map”中未定义的
值的唯一方法?

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

目前,您想要的东西没有本机支持。您可以看到关于其包含的一些讨论中的一个


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

a。只需使用
if-else
语句

这是个不错的选择——但有些人只是觉得这会打乱他们的人流

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

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

c。添加您自己的
过滤器
映射
方法

映射
迭代器
上,或者实际扩展对象(通常不鼓励),或者函数将其作为参数。也许你可以到图书馆去看看或者寻找一些想法(也许会有帮助?)

d。不要使用地图


这并不是一个“选项”,但它肯定是一些人得出的结论,所以我想我会列出它,因为他们只是觉得他们有一个地图还不支持的流程。

对于数组,通常有很多方法可以处理迭代/过滤/验证等。。。但是您不应该将
.map
映射到“
做一些工作”
”,您应该将
.map
仅用于创建新数组。我不确定你到底在问什么你需要返回值吗?然后使用map或filter,否则,如果只需要迭代数组,请使用forEach@CertainPerformance你所指的是我接手这个项目之前的代码,这个问题是专门用来询问“地图”的,你到底想做什么?你能发布一些实际的代码,预期的输入和输出吗?不太好clear@CertainPerformance我相信最新编辑的问题现在已经清晰易懂了,尽管在这个特定的示例中,它看起来像是
。forEach
应该在
.map
上使用。感谢您的解释和案例建议。问题标题已修改,以便更好地进行相关搜索