JavaScript如何过滤对象内数组并保留对象其他原有属性?
问题描述
现有如下结构的JavaScript对象:
const object = { name:'XYZ', Others: 'XYZ', numbers:[2,3,4,5,6,5] }
需求为过滤对象内部的numbers数组,仅保留值为5的元素,最终返回保留其余原有属性、且numbers数组为过滤后结果的完整对象,期望返回结果如下:
{ name:'XYZ', Others: 'XYZ', numbers:[5,5] }
如果直接调用object.numbers.filter(),方法只会返回过滤后的numbers数组,无法得到包含name、Others等其余属性的完整对象,需要找到该需求的最优实现方式。
解决方案
根据是否需要保留原始对象数据,可选择对应实现:
- 无副作用写法(推荐)
用对象展开运算符复制原对象所有属性,单独覆写过滤后的numbers字段即可,不会改动原始对象,是目前可读性、通用性最好的写法:const result = { ...object, numbers: object.numbers.filter(item => item === 5) } - 直接修改原对象写法
如果不需要保留原始的numbers数组数据,直接给属性重新赋值即可,代码更简洁:
执行后原对象会直接变为目标结构,但原始数组数据会被覆盖,仅在确认不需要留存原数据时使用。object.numbers = object.numbers.filter(item => item === 5)
补充说明:
Array.prototype.filter的设计就是仅返回过滤后的新数组,本身不会操作外层关联对象,只需要把过滤得到的数组赋值给对象的对应属性即可,不需要额外封装复杂逻辑或遍历操作。
内容的提问来源于stack exchange,提问作者Ayaz
相关产品推荐
相关产品推荐

