Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.filter使用react/javascript从对象数组中删除项_Javascript_Arrays_Reactjs_Object_Ecmascript 6 - Fatal编程技术网

使用.filter使用react/javascript从对象数组中删除项

使用.filter使用react/javascript从对象数组中删除项,javascript,arrays,reactjs,object,ecmascript-6,Javascript,Arrays,Reactjs,Object,Ecmascript 6,我正在使用javascript的.filter函数从这个对象数组中删除TypeMp3List中的元素ID。格式如下: 例如,删除ID为33390的MP3时,在执行筛选后,我希望获得的格式如下: 这是我迄今为止构建的代码: showDeleteConfirmation(value, id, index, thisHandler) { confirm({ title: 'Voulez vous supprimer cette audio ?', content

我正在使用javascript的.filter函数从这个对象数组中删除TypeMp3List中的元素ID。格式如下:

例如,删除ID为33390的MP3时,在执行筛选后,我希望获得的格式如下:

这是我迄今为止构建的代码:

  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)
相同的结果。看起来映射和过滤有问题,不知道到底是什么。任何帮助都将不胜感激。

因为您使用了
对象。条目
-这将返回一个二维数组(例如,包含数组的数组),并且在
过滤器中检查每个数组是否等于一个数。事实并非如此。您希望访问此数组的第一个元素-因此可以进行一点分解:

Object.entries(d.TypeMp3List).filter(([index]) => index !== id)
或更详细的数组表示法:

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

由于需要基于.filter验证的新数组,请尝试返回正在比较的结果:

Object.fromEntries(
    Object.entries(d.TypeMp3List).filter((index) => {
        return index !== id
    )};
)

我认为您在使用
filter
函数时犯了一个错误

在我看来,您可以将每个项传递给filter函数,并使用其
id
filterId
进行比较

showDeleteConfirmation(value, filterId, index, thisHandler) {
...
   Object.entries(d.TypeMp3List).filter(listItem => listItem.id !== filterId)
...

@JackBashford Id传入
Id
showDeleteConfirmation
params中是什么意思?你说得对,但我在两个控制台日志中仍然得到相同的结果。要说的是,删除是正确的工作这不是问题,我改变了根据你所说的,什么也没有发生。