javascript - 如果嵌套数组包含空值或仅包含空值,如何将其转换为字符串?

标签 javascript arrays typescript multidimensional-array lodash

我需要替换主数组内具有空值的嵌套数组,例如 [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' }]
  }
];

我们看到,第一个数组有电话:[null, null]第二个是 [] 。我需要做什么才能将它们转换为以下内容:

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] 的嵌套数组。或[] .

我尝试了以下方法:

var filtered = this.array.map(subarray => subarray.filter(el => el != null));

从这里Stack Overflow answer ,但我收到一条错误消息:

Error: subarray.filter is not a function

然后我尝试了第二种方法,使用 lodash's every()isNull方法和属性但无法弄清楚:

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相同的错误。

这是一个stackblitz .

最佳答案

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

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/ ,这是您编辑的 stackblitz: 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
  };
});

关于javascript - 如果嵌套数组包含空值或仅包含空值,如何将其转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61060943/

相关文章:

javascript - 在 JavaScript 中停止 setInterval 调用

javascript - OWL 轮播在自动播放中添加 #slide-0/1/2

arrays - Go中的JSON解码有符号整数数组

c++ - 3D 指针段错误

angular - 如何获取 Angular 2 组件的 html 模板?

javascript - 无法使用 useRef 作为 componentDidUpdate 替代品

Javascript数组只保存最近的对象

TypeScript:获取对象本身内部的对象键类型

node.js - 语法错误 : Cannot find name 'setImmediate'

Javascript 转义字符串以进行输出并避免 NaN