2017-09-04 79 views
0

JSON对象: -如何删除对象在阵列中ES6

{ 
    "todos": [ 
    { 
     "name": "New Todo", 
     "completed": false 
    }, 
    { 
     "name": "Second Todo", 
     "completed": false 
    }, 
    { 
     "name": "Third Todo", 
     "completed": false 
    }, 
    { 
     "name": "Fourth Todo", 
     "completed": false 
    } 
    ] 
} 

在我的JSON对象,我想删除特定对象。我已经尝试使用下面的代码,但它不能删除。

​​

回答

1

const obj永远的state阵列中找到,因为indexOf将检查基础上,参考每个项目。当您创建具有不同参考的obj并且未包含在数组中时,它将永远不会在那里找到。

如果要根据两个条件比较每个项目,可以使用filter函数并执行相反的操作以获取过滤的列表。

const items = [ 
 
    { 
 
     "name": "New Todo", 
 
     "completed": false 
 
    }, 
 
    { 
 
     "name": "Second Todo", 
 
     "completed": false 
 
    }, 
 
    { 
 
     "name": "Third Todo", 
 
     "completed": false 
 
    }, 
 
    { 
 
     "name": "Fourth Todo", 
 
     "completed": false 
 
    }]; 
 
    
 
const obj = { name: 'New Todo', completed: false }; 
 

 
const newArr = items.filter(item => item.name !== obj.name || item.completed !== obj.completed); 
 

 
console.log(newArr);

3

一种选择是使用滤镜阵列:

state = [ { ... }, ... ] // Your array 
state = state.filter(item => !(item.name === action.value && item.completed === false)); 
+1

这是不是会使'_just_离开'state'那个对象?你不想'item.name!== action.name'等? – Andy

+1

对不起,我更新了答案 – Faly

+0

它也会删除重复的项目。如果对象具有唯一的ID或类似的东西,这将是一个很好的解决方案。 –

0

为了让你需要让你要删除的对象的引用的工作:

state = { 
 
    "todos": [ 
 
    { 
 
     "name": "New Todo", 
 
     "completed": false 
 
    }, 
 
    { 
 
     "name": "Second Todo", 
 
     "completed": false 
 
    }, 
 
    { 
 
     "name": "Third Todo", 
 
     "completed": false 
 
    }, 
 
    { 
 
     "name": "Fourth Todo", 
 
     "completed": false 
 
    } 
 
    ] 
 
}; 
 

 

 
item = state.todos[2]; 
 

 
// Delete: 
 
index = state.todos.indexOf(item); 
 

 
state = { 
 
    todos: [ 
 
    ...state.todos.slice(0, index), 
 
    ...state.todos.slice(index + 1) 
 
    ] 
 
}; 
 

 
console.log(state)