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

我需要替换具有空值的主数组中的嵌套数组,比如让我们说[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 相同的错误。


GCT1015
浏览 137回答 2
2回答

喵喵时光机

映射数组,并_.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 =>&nbsp;&nbsp; _.mapValues(o, v => // map the values of the object&nbsp; &nbsp; _.isArray(v) && v.every(_.isNull) ? 'empty' : v // if a value is an array, and all values are null return 'empty'&nbsp; ));console.log(result);<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

慕莱坞森

首先循环遍历数组,在每个对象中,您可以设置电话属性:for(const entry of array) {&nbsp; &nbsp; const isEmpty = entry.phone.filter(p => p !== null).length === 0;&nbsp; &nbsp; 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 => {&nbsp; return {...entry, // Copy previous values&nbsp; &nbsp; phone: entry.phone.filter(p => p !== null).length === 0 ? 'empty' : entry.phone&nbsp; };});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript