Как удалить элемент в объекте массива

Множество : массив перед [ {id: 1, тест: [null, 2, 3]}, {id: 2, тест: [1, 2, 3] }]

Массив после [ {id: 1, тест: [2, 3]}, {id: 2, тест: [1, 2, 3] }] как удалить значение null?

Я пытался использовать эту функцию, но она не работает, что не так с этой функцией в массиве?

var filtered = fullArray.filter(function (object) {
    return object.test !== null;
  });

Массив, очевидно, !== null

Spectric 01.03.2023 02:41
fullArray.map(i => ({ ...i, test: test.filter(j => j !== null) }))
code 01.03.2023 02:43
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
1
2
50
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны перебрать свой вложенный массив и применить к нему filter вместо того, чтобы сравнивать его с null

const fullArray = [{
  id: 1,
  test: [null, 2, 3]
}, {
  id: 2,
  test: [1, 2, 3]
}]


var filtered = fullArray.map(function(obj) {
  return ({
    ...obj,
    test: obj.test.filter(elm => elm)
  })
});

console.info(filtered)

Объяснение:

Эта первая «внешняя» карта перебирает элементы вашего массива, беря каждый элемент (obj) и возвращая что-то

var filtered = fullArray.map(function(obj) {
  ...
});

Возвращаемое значение:

return ({
    ...obj,
    test: obj.test.filter(elm => elm)
  })

Является копией obj, сделанной с помощью оператора спреда, с переопределением нашего атрибута test, который будет содержать выходные данные метода obj.test.filter(elm => elm).

Array.filter — это метод, который выполняет итерацию по массиву и возвращает элемент, только если заданный предикат (функция, возвращающая логическое значение) возвращает значение true. В нашем случае, если элемент массива test имеет значение null, это означает, что это false, и тогда он будет удален из массива.

Это не дает желаемого результата.

code 01.03.2023 02:44

Извините, я пропустил оператора спреда, только что исправил!

Fcmam5 01.03.2023 02:46
Ответ принят как подходящий

В JavaScript метод Array.filter() можно использовать для удаления элементов из массива на основе условия. В вашем случае вы можете использовать Array.filter() для удаления нулевых значений из тестового массива каждого объекта во входном массиве. Вот возможная реализация:

function removeNullValues(array) {
  return array.map(obj => {
    obj.test = obj.test.filter(val => val !== null);
    return obj;
  });
}

Функция принимает массив объектов в качестве входных данных, где каждый объект имеет свойство id и тестовое свойство, представляющее собой массив, содержащий нулевые значения. Функция возвращает новый массив объектов, где тестовый массив каждого объекта больше не содержит нулевых значений.

Метод Array.map() используется для перебора каждого объекта во входном массиве и возврата нового объекта с отфильтрованным тестовым массивом. Метод Array.filter() используется для удаления нулевых значений из тестового массива каждого объекта. Стрелочная функция val => val !== null используется в качестве функции фильтра, которая возвращает true для всех значений, отличных от null.

Вы можете вызвать функцию следующим образом:

const array = [
  { id: 1, test: [null, 2, 3] },
  { id: 2, test: [1, 2, 3] }
];

const result = removeNullValues(array);

console.info(result);
// Output: [ { id: 1, test: [ 2, 3 ] }, { id: 2, test: [ 1, 2, 3 ] } ]

Это должно дать вам желаемый результат.

Я предлагаю два простых способа:

let fullArray = [ { id: 1, test: [ null, 2, 3 ] }, { id: 2, test: [ 1, 2, 3 ] } ];

// first way
let filtered = fullArray.map(m => ({
  id: m.id, 
  test: m.test.filter(f => f !== null)
}));

console.info(filtered);

// second way
fullArray.forEach((fe) => {
  fe.test = fe.test.filter(f => f !== null);
  return fe;
});

console.info(fullArray);

Спасибо, ребята, за направление, это действительно помогло мне

Другие вопросы по теме