Фильтрация и преобразование массива. Vanilla js

Рейтинг: 0Ответов: 2Опубликовано: 17.01.2023

Задача простая, в функцию приходит 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]. Что я делаю не так?

Ответы

▲ 1

Вариант решения. 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: [ 'Маленькая', 'Средняя' ] }
]
▲ 0

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)];
    }
  })
);