如何将空字符串数组转换为空数组?
我有一个对象数组:
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 |