可以投票,但至少让我知道您为什么这样做。
我热衷于研究是否有替代解决方案,这就是为什么我在进行预研究时问了这个问题。
我正在重构一些现有的代码,这些代码将“在运行时存储数据”从“对象”转换为“地图”(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/)。
目标是在不返回结果的情况下处理给定的运行时数据。
由于filter
和map
可以应用于Object.keys
,因此开发人员很容易理解流程中的逻辑。
旧代码示例
Object.keys(givenObj)
.filter(key => { return typeof givenObj[key] === 'string' && givenObj[key] !== undefined })
.map( key => { processData(givenObj[key]) } )
很明显,人们在执行下一个步骤之前就已经了解了应该“过滤”的内容。
但是,使用“地图”,似乎只能在新的迭代中通过forEach
或values
来完成值的验证。
例如
givenMap.forEach( (value, key) => {
if ( typeof value !== 'string' || value === undefined ){
invalidHandling(key)
} else {
processData(value)
}
})
问题:
if
是否是处理“地图”中的undefined
值的唯一方法?
答案 0 :(得分:1)
您要问的是“地图/迭代器是否支持声明式编程?”
当前,您想要的内容没有本地支持。您可以看到有关将其包含here的一些讨论之一。
我看到人们采取的四个选择是:
a。只需使用if else
语句
这不是一个不好的选择-但是有些人只是觉得它干扰了他们的流程。
b。转换为数组,然后返回。
这显然不是性能最高或最干净的解决方案。
c。添加自己的filter
和map
方法
要么在Map
上,要么在iterator
上,或者实际上扩展对象(通常不鼓励),或者使用函数将其作为参数。也许请查看this stack overflow answer或寻找一些库以获取一些想法(也许wu.js可以帮助您?)。
d。不要使用地图
每个人说的并不是一个“选项”,但肯定可以得出结论,因此,尽管我将其列出来,因为他们只是觉得他们已经习惯了Google Maps不支持的流程( )。