JavaScript:从对象数组排除date字段,我的代码为何出错?
问题分析与解决
你的代码错误原因
filter()方法的作用是筛选数组中符合条件的元素,返回原数组的子集,根本不是用来修改数组内对象的属性结构的。- 你的判断条件
!items.date里,items.date的值是0,在JavaScript中0会被转换为布尔值false,所以!items.date结果为true,最终filter会返回原数组的全部元素,但对象里的date字段完全没被删除,自然达不到预期效果。
正确实现方式
要生成不含date字段的新对象数组,应该用map()方法遍历数组,对每个对象做属性处理:
方法1:对象解构+剩余属性(推荐)
const new_arr = arr.map(({ date, ...rest }) => rest); console.log(new_arr);
这种方式会解构出每个对象的date字段并丢弃,把剩下的属性打包成新对象,不会修改原数组里的对象。
方法2:手动提取属性
如果不熟悉解构语法,也可以手动提取需要的属性:
const new_arr = arr.map(item => ({ id: item.id, user: item.user })); console.log(new_arr);
这种方式更直观,适合属性数量较少的场景。
注意:别用delete修改原对象(不推荐)
不要直接用delete item.date后返回原对象,因为这会修改原数组里的对象,破坏原数据的完整性:
// 不推荐,会污染原数组 const new_arr = arr.map(item => { delete item.date; return item; });
内容的提问来源于stack exchange,提问作者Teshie Ethiopia
相关产品推荐
相关产品推荐

