如何通过对象或JSON数据的属性值删除数组中对应的数据

一般情况下,我们要删除数组中的数据,都需要先获得该数据的数组下标,然后用splice方法删除,当数组中储存的数据是对象或者JSON数据时,我们想通过数据内容获取到对应的数组下标是有点点复杂的,需要好几行代码才能搞定,Array原型链中我们常用的获取数组下标的方法在这种情况下就失效了,例如indexOf

>let a = [{x:1,y:2}]
>a.indexOf({x:1,y:2})
>-1//返回的结果是-1,表示查不到,但是明明就有这个数据

用ES7新添加的includes方法看看找得到数据吗

>a.includes({x:1,y:2})
>false//返回 false 也是找不到数据

找不到数据,那就不可能获取到数组下标,自然无法删除对应数据,所以结论是用indexOf方法获取数组下标并不适用于数据是对象类型或者JSON类型的情况。

遇到这种情况用filter方法简单快捷,一行代码搞定
给定数组

let arr = [{id:3,name:'a'},{id:1,name:'b'},{id:2,name:'c'}]

这里我特地把id和数组下标设置成不对应的情况,然后删除id是1的那一条数据

const newArr = arr.filter(obj=>obj.id!==1)

filter的用法是将符合括号内条件的数据集合起来生成一个新数组返回
这里输出一下新数组看看


如何通过对象或JSON数据的属性值删除数组中对应的数据_第1张图片

可以看到id为1的数据已经删除了

你可能感兴趣的:(如何通过对象或JSON数据的属性值删除数组中对应的数据)