You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:12:22