Фильтрация и преобразование массива. Vanilla js
Задача простая, в функцию приходит id и type. Мне необходимо из объекта value убрать значение type, т.е мне необходимо преобразовать массив. Я использую .map, я делаю проверку на id,а потом в объекте value убираю type.На выходе должен получится новый массив, без type.
let data = [
{ id: 1, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 2, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 3, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 4, value: ["Маленькая", "Средняя"] }
];
let id = 1;
let type = "Маленькая";
console.log(
data.map((z) => {
if (z.id === id) {
let arr = z.value.filter((p) => p !== type);
z.value = [arr];
}
})
);
На выходе я получаю [null,null,null,null]. Что я делаю не так?
Ответы (2 шт):
Автор решения: Frallen
→ Ссылка
let data = [
{ id: 1, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 2, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 3, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 4, value: ["Маленькая", "Средняя"] }
];
let id = 1;
let type = "Маленькая";
console.log(
data.map((z) => {
if (z.id === id) {
return z.value = [...z.value.filter((p) => p !== type)];
}
})
);
Автор решения: Liar Рonest
→ Ссылка
Вариант решения. MAP возвращает уже НОВЫЙ массив. Так что выводить в консоль нужно именно результат выполнения этого метода. Не стоит забывать, что если в условии мы попали на другой ID, то Z также нужно возвращать.
let data = [
{ id: 1, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 2, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 3, value: ["Маленькая", "Средняя", "Большая"] },
{ id: 4, value: ["Маленькая", "Средняя"] }
];
let id = 1;
let type = "Маленькая";
data = data.map(z => {
if (z.id === id) {
z.value = z.value.filter(val => val != type);
}
return z;
})
console.log(data)
Вывод:
[
{ id: 1, value: [ 'Средняя', 'Большая' ] },
{ id: 2, value: [ 'Маленькая', 'Средняя', 'Большая' ] },
{ id: 3, value: [ 'Маленькая', 'Средняя', 'Большая' ] },
{ id: 4, value: [ 'Маленькая', 'Средняя' ] }
]