javascript - 如何将空字符串数组转换为空数组?
问题描述
我有一个对象数组:
const arr = [{name: ''}]
我想映射这个数组,如果name
值是""
(空字符串),我希望结果是一个空数组[]
。
如果它有值,那么我希望结果是一个包含值的数组(例如。["Rick"]
我试图有一个后备值,但结果仍然是[""]
我的尝试:
const result = arr.map(a => a.name) || []
实际结果:[""]
期望的结果:[]
解决方案
先过滤数组
const arrWithNamesAndEmpty = [{name: ''}, {name: 'Hello'}];
const arrWithEmptyNames = [{name: ''}];
function removeEmptyNamesAndPluckName(arr) {
return arr.filter(a => a.name).map(a => a.name);
}
console.log({
arrWithNamesAndEmpty: removeEmptyNamesAndPluckName(arrWithNamesAndEmpty),
arrWithEmptyNames: removeEmptyNamesAndPluckName(arrWithEmptyNames)
})
上面的解决方案是最容易阅读的,但它不是最高效的。如果您发现自己处于瓶颈状态,@joopmacroopreduce
建议的方法是更快的版本。远离解决方案,它在 Chrome、Safari 和 Edge 上的速度要慢一个数量级,而且也不那么容易理解。flatMap
见https://jsbench.me/0lkpo4lsu4/1
下表中的 Ops/sec更多更快
浏览器 | 过滤器+地图 | 减少 | 平面图 |
---|---|---|---|
铬合金 | 2,525,726 | 3,800,221 | 170,365 |
火狐 | 836,111 | 957,237 | 598,365 |
苹果浏览器 | 477,305 | 2,089,445 | 367,878 |
边缘 | 2,790,834 | 4,819,590 | 217,948 |
推荐阅读
- reactjs - 如何根据 React 中的键名过滤对象以进行显示?
- wordpress - WordPress:有条件地过滤自定义帖子类型
- asp.net-core - 来自 RemoteAuthentication 的错误:OpenIdConnectAuthenticationHandler:message.State 为 null 或为空
- r - 有没有办法从 Rmarkdown 中的 YAML 标头中提取日期信息以用于 R 块?
- javascript - 从 ReactJS 中的 API 获取数据后如何重新渲染前端
- c - cs50 恢复,恢复的图像不匹配
- reactjs - 延迟加载 ReactJS 组件
- amazon-web-services - AWS IoT Core 中是否有任何规定可以获取以前的影子状态?是否有任何 API / 配置历史?
- sql - 每天都有窗口函数的 SQL 性能问题
- python - 正则表达式从python中的文本中识别固定字符字母数字词