Javascript 如何在ES6中删除数组中的对象
Json对象:-Javascript 如何在ES6中删除数组中的对象,javascript,ecmascript-6,Javascript,Ecmascript 6,Json对象:- { "todos": [ { "name": "New Todo", "completed": false }, { "name": "Second Todo", "completed": false }, { "name": "Third Todo", "completed": false }, { "name": "Fourth T
{
"todos": [
{
"name": "New Todo",
"completed": false
},
{
"name": "Second Todo",
"completed": false
},
{
"name": "Third Todo",
"completed": false
},
{
"name": "Fourth Todo",
"completed": false
}
]
}
在我的json对象中,我想删除特定的对象。我已尝试使用以下代码,但它没有删除
const obj1 = {name: action.value, completed: false};
const index = state.indexOf(obj1);
if (index !== -1) {
state.splice(index, 1);
}
return [...state,state];
break;
在
状态
数组中永远找不到您的常量对象
,因为索引将根据引用检查每个项目。当您创建具有不同引用且不包含在数组中的obj
时,将永远不会在那里找到它
如果要根据两个条件比较每个项目,可以使用filter
功能并执行相反的操作以获得筛选列表
const项=[
{
“姓名”:“新待办事项”,
“已完成”:false
},
{
“姓名”:“第二个待办事项”,
“已完成”:false
},
{
“姓名”:“第三个待办事项”,
“已完成”:false
},
{
“姓名”:“第四个待办事项”,
“已完成”:false
}];
const obj={name:'New Todo',completed:false};
const newArr=items.filter(item=>item.name!==obj.name | | | item.completed!==obj.completed);
控制台日志(newArr)
您的常量对象
将永远不会在状态
数组中找到,因为索引
将根据引用检查每个项目。当您创建具有不同引用且不包含在数组中的obj
时,将永远不会在那里找到它
如果要根据两个条件比较每个项目,可以使用filter
功能并执行相反的操作以获得筛选列表
const项=[
{
“姓名”:“新待办事项”,
“已完成”:false
},
{
“姓名”:“第二个待办事项”,
“已完成”:false
},
{
“姓名”:“第三个待办事项”,
“已完成”:false
},
{
“姓名”:“第四个待办事项”,
“已完成”:false
}];
const obj={name:'New Todo',completed:false};
const newArr=items.filter(item=>item.name!==obj.name | | | item.completed!==obj.completed);
控制台日志(newArr)代码>一个选项是使用数组过滤器:
state = [ { ... }, ... ] // Your array
state = state.filter(item => !(item.name === action.value && item.completed === false));
一个选项是使用阵列过滤器:
state = [ { ... }, ... ] // Your array
state = state.filter(item => !(item.name === action.value && item.completed === false));
要使其正常工作,您需要保留要删除的对象的引用:
状态={
“待办事项”:[
{
“姓名”:“新待办事项”,
“已完成”:false
},
{
“姓名”:“第二个待办事项”,
“已完成”:false
},
{
“姓名”:“第三个待办事项”,
“已完成”:false
},
{
“姓名”:“第四个待办事项”,
“已完成”:false
}
]
};
item=state.todos[2];
//删除:
索引=state.todos.indexOf(项目);
状态={
待办事项:[
…state.todos.slice(0,索引),
…state.todos.slice(索引+1)
]
};
console.log(state)
要使其工作,您需要保留要删除的对象的引用:
状态={
“待办事项”:[
{
“姓名”:“新待办事项”,
“已完成”:false
},
{
“姓名”:“第二个待办事项”,
“已完成”:false
},
{
“姓名”:“第三个待办事项”,
“已完成”:false
},
{
“姓名”:“第四个待办事项”,
“已完成”:false
}
]
};
item=state.todos[2];
//删除:
索引=state.todos.indexOf(项目);
状态={
待办事项:[
…state.todos.slice(0,索引),
…state.todos.slice(索引+1)
]
};
console.log(state)
这不是只剩下状态
和那个对象吗?您不想要item.name!==action.name
etc?它还将删除重复的项目。如果对象有一个唯一的id或类似的东西,这将是一个很好的解决方案。这不是只剩下该对象的状态吗?您不想要item.name!==action.name
etc?它还将删除重复的项目。如果对象具有唯一id或类似的内容,这将是一个很好的解决方案。