如何删除对象中数组的指定元素?delete与splice尝试失败
解决对象数组元素删除的问题
先分析你之前的错误
- delete操作符的问题:delete确实只能移除数组索引对应的元素值,不会改变数组长度,会留下空位(表现为null/undefined),不是真正意义上的删除元素。
- splice调用错误:你写的
my_object[contacts_id][1].splice(0,1)有两个问题:- 属性名
contacts_id没有加引号,会被当作变量处理,如果没定义这个变量会直接报错;正确的访问方式是my_object["contacts_id"]或者my_object.contacts_id。 - 你调用的是数组元素(值为2的数字)的splice方法,但数字类型没有splice方法,splice是数组对象的方法,必须调用在数组本身。
- 属性名
两种可行的解决方法
方法1:用splice直接修改原数组
splice是数组的内置方法,能直接修改原数组,语法是array.splice(起始索引, 删除数量)。你要删除的元素在contacts_id数组的索引1位置,所以代码如下:
// 直接修改原对象的数组 my_object.contacts_id.splice(1, 1);
执行后原对象的contacts_id就会变成[1, 3]。如果不想修改原对象,可以先浅拷贝对象再操作:
// 浅拷贝原对象 let my_object_modified = {...my_object}; // 对拷贝后的数组执行删除 my_object_modified.contacts_id.splice(1, 1);
方法2:用filter创建新数组(不修改原对象)
如果希望保留原对象不变,用filter方法生成新数组更合适,它会返回所有符合条件的元素:
let my_object_modified = { ...my_object, contacts_id: my_object.contacts_id.filter(item => item !== 2) };
这段代码会创建一个新对象,其中contacts_id是过滤掉值为2的元素后的新数组,原对象不受影响。
内容的提问来源于stack exchange,提问作者Jörg
相关产品推荐
相关产品推荐

