Мне нужно заменить вложенные массивы внутри основного массива с нулевыми значениями, например, скажем, [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));
из этого Ответа переполнения стека , но у меня есть ошибка, говорящая:
Ошибка: subarray .filter не является функцией
Затем я попробовал второй метод, используя метод и свойство 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)
}
});
}
Я искал несколько вопросов о переполнении стека, но структура массивов выглядит следующим образом: [ [1, 2], [1,3]...]
, а не как структура моего массива [{...}, {...}]
, поэтому я попробовал некоторые решения и получил ту же ошибку, что и в методе 1 выше.
Вот стек-блиц .