Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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
Javascript 如何在ES6中删除数组中的对象_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 如何在ES6中删除数组中的对象

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

Json对象:-

{
  "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或类似的内容,这将是一个很好的解决方案。