如何将空字符串数组转换为空数组?

我有一个对象数组:

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

以上是如何将空字符串数组转换为空数组?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>