Удалить элемент в многомерном массиве, когда свойство этого элемента пусто

#javascript #arrays #multidimensional-array #filter #splice

#javascript #массивы #многомерный массив #Фильтр #сращивание

Вопрос:

Эй, я пытаюсь удалить элемент в многомерном массиве, когда его свойство массива «texts» пусто. Подход, который я пытаюсь использовать, заключается в использовании метода filter следующим образом:

 array.filter(item => item.texts.length === 0)
 

Но по какой-то причине это не работает. Другим способом было бы найти элемент по его свойству name (к которому у меня есть доступ), получить его индекс, проверить, пуст ли массив texts внутри него, и использовать метод splice для его удаления, но я не уверен, как это сделать в многомерном массиве. Любая помощь будет оценена.

Это массив, с которым я имею дело:

 const array = [
 0: Object {
  name: 'Name 1',
  texts[
   0: Obj{
    id: '123',
    body: 'test message'
   },
   1: Obj{
    id: '456',
    body: 'test message 2'
   }
  ]
 },

 1: Object {
  name: 'Name 2',
  texts[
   0: Obj{
    id: '789',
    body: 'test message3'
   },
   1: Obj{
    id: '101112',
    body: 'test message 4'
   }
  ]
 }
]
 

Комментарии:

1. Вам нужно изменить логику arr.filter(item => item.texts.length !== 0) . Ваш фильтр в его нынешнем виде возвращает только объекты, text массивы которых имеют длину 0. (кроме того, пожалуйста, сделайте ваш код допустимым на javascript)

Ответ №1:

Вам нужно убедиться, что ваш объект правильно объявлен, а затем изменить логику.

 array.filter(item => item.texts.length !== 0)
 
 const array = [
  {
    name: 'Name 1',
    texts: [
      {
        id: '123',
        body: 'test message'
      },
      {
        id: '456',
        body: 'test message 2'
      }
    ]
  },
  {
    name: 'Name 2',
    texts: []
  }
]

console.log(array.filter(item => item.texts.length !== 0));