简体   繁体   中英

REACT Delete Element in array of objects

I am having trouble deleting an element inside an array of objects. I want to simply delete an object inside the array. When I try to use .IndexOf(). It gives me back -1. is there a way to do this without creating a reference to each object.

This is my Array of objects.

   let todos = [{
      id: 1,
      task: 'Finish This React App'
    },{
      id: 2,
      task: 'Do Another App'
    },{
      id: 3,
      task: 'Pass data from the parent to the child and reverse'
    }]

let task = {id:2,task:'Do Another App'}

let todosArray = this.props.todos

todosArray.indexOf(task,0) //= -1

Overall I want to only have objects 1 and 3 inside the todos array.

您可以在纯香草ES6中使用滤镜:

var array = todos.filter(item => item.id === 1 || item.id === 3);

The Array#indexOf method always returns -1 since the objects reference is not the same.

You can use Array#findIndex , Array#every , Object.keys() and Array#splice methods.

 let todos = [{ id: 1, task: 'Finish This React App' }, { id: 2, task: 'Do Another App' }, { id: 3, task: 'Pass data from the parent to the child and reverse' }] let task = { id: 2, task: 'Do Another App' }; let keys = Object.keys(task); // remove element from the array by index todos.splice( // get the index of the element todos.findIndex(function(obj) { // check all property values are equal return keys.every(function(k) { return task[k] === obj[k]; }); // if you want to check only the `id` property then // you can avoid the above codes and use // return obj.id === task.id; }), 1); console.log(todos) 

Note : Above methods only works if there is no nested object and array property value.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM