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