首页 > 解决方案 > 如何将空字符串数组转换为空数组?

问题描述

我有一个对象数组:

const arr = [{name: ''}]

我想映射这个数组,如果name值是""(空字符串),我希望结果是一个空数组[]

如果它有值,那么我希望结果是一个包含值的数组(例如。["Rick"]

我试图有一个后备值,但结果仍然是[""]

我的尝试:

const result = arr.map(a => a.name) || []

实际结果:[""]

期望的结果:[]

标签: javascriptarrays

解决方案


先过滤数组

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

推荐阅读