использование .filter для удаления элемента из массива объектов с помощьюact / javascript - PullRequest
1 голос
/ 28 июня 2019

Я использую функцию .filter javascript для удаления элемента по его идентификатору в TypeMp3List из этого массива объектов. Формат такой:

enter image description here

Формат, который я хочу получить после выполнения фильтра при удалении, например, MP3 с ID:33390, таков:

enter image description here

Это код, который я построил до сих пор:

  showDeleteConfirmation(value, id, index, thisHandler) {
    confirm({
      title: 'Voulez vous supprimer cette audio ?',
      content: '',
      okText: 'Oui, je confirme',
      okType: 'danger',
      cancelText: 'Non',
      onOk() {
       deleteMp3Request(id);
       var { extraitMP3 } = thisHandler.state;

        var array = [];
        for (var key in extraitMP3) {
          array.push(extraitMP3[key]);
        }
        console.log('array',array)

        const result = array.map(d => ({ 
          ...d, 
          TypeMp3List: 
              Object.fromEntries(
                Object.entries(d.TypeMp3List).filter(index => index !== id)
              ) 
        }))
        console.log('result',result)


       thisHandler.setState({result: result})
       NotificationManager.success("le fichier audio est supprimé avec succès !", "");
     },
     onCancel() {
     },
    });  
  }

Проблема в том, что после сопоставления и фильтрации console.log(result) дает мне те же результаты, что и console.log(array). Похоже, что с отображением и фильтрацией что-то не так, и я точно не знаю, что это такое. любая помощь будет оценена.

Ответы [ 3 ]

3 голосов
/ 28 июня 2019

Поскольку вы используете Object.entries - это возвращает двумерный массив (например, массив, содержащий массивы), и в пределах вашего filter вы проверяете, равен ли каждый массив числу.Это не так.Вы хотите получить доступ к первому элементу этого массива - так что или небольшая деструктуризация:

Object.entries(d.TypeMp3List).filter(([index]) => index !== id)

Или более подробное обозначение массива:

Object.entries(d.TypeMp3List).filter(index => index[0] !== id)
0 голосов
/ 28 июня 2019

Я думаю, что вы допустили ошибку при использовании функции filter.

По моему мнению, вы можете передать каждый элемент в функцию фильтрации и использовать его id для сравнения с filterId.

showDeleteConfirmation(value, filterId, index, thisHandler) {
...
   Object.entries(d.TypeMp3List).filter(listItem => listItem.id !== filterId)
...
0 голосов
/ 28 июня 2019

, так как вы хотите новый массив на основе проверки .filter, попробуйте вернуть результат того, что вы сравниваете:

Object.fromEntries(
    Object.entries(d.TypeMp3List).filter((index) => {
        return index !== id
    )};
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...