为了账号安全,请及时绑定邮箱和手机立即绑定

如果嵌套数组包含空值或只是一个空值,如何将它转换为字符串?

如果嵌套数组包含空值或只是一个空值,如何将它转换为字符串?

GCT1015 2022-06-16 15:01:00
我需要替换具有空值的主数组中的嵌套数组,比如让我们说[null, null],或者用字符串值替换为空的嵌套数组,比如"empty".假设我们有以下数组:array = [  {    id: 123,     name: 'Peter',    phone: [null, null],    addresses: [{ address1: 'Manchester, UK', address2: 'London, UK' }]  },  {    id: 124,    name: 'Sara',    phone: [],    addresses: [{ address1: 'London, UK', address2: 'Paris, FR' }]  }];我们看到,第一个数组有 phone:[null, null]而第二个有它 as []。我需要做什么才能将它们转换为以下内容:array = [  {    id: 123,     name: 'Peter',    phone: "empty",    addresses: [{ address1: 'Manchester, UK', address2: 'London, UK' }]  },  {    id: 124,    name: 'Sara',    phone: "empty",    addresses: [{ address1: 'London, UK', address2: 'Paris, FR' }]  }];这是一个示例,每个数组可能包含多个嵌套数组,它们具有相同的[null, null]or []。我尝试了以下方法:var filtered = this.array.map(subarray => subarray.filter(el => el != null));从这个Stack Overflow 答案,但我有一个错误说:错误:subarray.filter 不是函数然后我尝试使用lodash's every()andisNull方法和属性的第二种方法,但无法弄清楚:let props = [];props = Array.from(new Set(this.array.flatMap(e => Object.keys(e), [])));console.log(props)for (const prop of props) {  this.array.forEach(e => {    if ((Array.isArray(e[prop]) || typeof(e[prop]) === 'object') && e[prop]._.every(_.isNull)) {      console.log(e)    }  });}我在 Stack Overflow 上搜索了几个问题,但数组的结构类似于:[ [1, 2], [1,3]...]而不像我的数组结构[{...}, {...}],所以我尝试了一些解决方案并得到了与上述方法 1 相同的错误。
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

映射数组,并_.mapValues()在每个对象上使用。对于每个作为数组且充满值的null值,返回'empty':


const array = [{"id":123,"name":"Peter","phone":[null,null],"addresses":[{"address1":"Manchester, UK","address2":"London, UK"}]},{"id":124,"name":"Sara","phone":[],"addresses":[{"address1":"London, UK","address2":"Paris, FR"}]}];


const result = array.map(o => 

  _.mapValues(o, v => // map the values of the object

    _.isArray(v) && v.every(_.isNull) ? 'empty' : v // if a value is an array, and all values are null return 'empty'

  )

);


console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

查看完整回答
反对 回复 2022-06-16
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

首先循环遍历数组,在每个对象中,您可以设置电话属性:


for(const entry of array) {

    const isEmpty = entry.phone.filter(p => p !== null).length === 0;

    entry.phone = isEmpty ? 'empty' : entry.phone;

}

需要注意的是,这会编辑您的数组。对问题前提的一个担忧是您将数组属性设置为字符串,这并不理想。


现场示例:https ://jsfiddle.net/michaschwab/9ze3p2or/3/,这是您编辑的堆栈闪电战: https ://stackblitz.com/edit/null-nested-array-into-string-jwhfwn


如果你不想修改你的数组,这是一种方法:


const modified = array.map(entry => {

  return {...entry, // Copy previous values

    phone: entry.phone.filter(p => p !== null).length === 0 ? 'empty' : entry.phone

  };

});


查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信