【发布时间】:2020-07-18 12:26:57
【问题描述】:
我需要用 "empty" 这样的字符串值替换主数组中具有空值的嵌套数组,例如 [null, null] 或空的嵌套数组。
假设我们有以下数组:
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,但我收到一条错误消息:
错误:subarray.filter 不是函数
然后我尝试了第二种方法,使用lodash'severy()和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。
【问题讨论】:
-
[]或[null, null]数组是否始终是phone属性的值,或者您想替换整个对象中所有出现的[null, null](无论其属性如何) /键是) -
有些用户已有电话号码,有些则没有。我在这里举了一个关于电话号码的例子,但我的数据中还有其他字段可能会遇到同样的问题。
标签: javascript arrays typescript multidimensional-array lodash