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

如何在JavaScript数组中移除不包含指定属性的对象?

如何在JavaScript中过滤数组,保留含指定属性的对象

需要实现的需求是:移除数组中不包含DOB、marks或result任意一个属性的对象,只保留至少有其中一个属性的对象。

输入数组如下:

var array=[
    {
        "id": "1",
        "name": "john",
        "grade": "grade 1"
    },
    {
        "id": "4",
        "name": "sam",
        "grade": "grade 1",
        "DOB": null,
        "marks": 73,
        "result":"PASS"
    },
    {
        "id": "3",
        "name": "peter",
        "grade": "grade 1"
    },
    {
        "id": "5",
        "name": "robin",
        "grade": "grade 1",
        "marks": 63,
    },
    {
        "id": "2",
        "name": "james",
        "grade": "grade 1",
        "DOB": null,
        "result":"PASS"
    }   
]

你尝试的代码存在几个问题:

const filteredArray = array.filter( item => {
        if(!(('DOB' in item)||('marks' in item)||('result' in item)))
            console.log("ITEM DOESN'T HAVE FIELDS___DELETING IT")
            delete item
        }
    })
  1. filter方法的回调函数需要返回布尔值,用来决定当前元素是否保留在新数组里,你的代码没有返回值,最终filteredArray会是空数组。
  2. delete item是无效操作——item是回调里的局部变量,删除它不会改变原数组,也和filter的逻辑无关。
  3. 你的if语句没有用大括号包裹所有执行代码,导致只有console.log属于if块,delete item会被无条件执行。

正确实现方式

直接用filter筛选出至少包含DOB、marks、result其中一个属性的对象即可,回调返回对应条件的布尔值:

// 完整写法
const filteredArray = array.filter(item => {
    return ('DOB' in item) || ('marks' in item) || ('result' in item);
});

// 更简洁的箭头函数写法
const filteredArray = array.filter(item => 
    ('DOB' in item) || ('marks' in item) || ('result' in item)
);

执行后得到的filteredArray就是你要的预期输出:

[
    {
        "id": "4",
        "name": "sam",
        "grade": "grade 1",
        "DOB": null,
        "marks": 73,
        "result":"PASS"
    },
    {
        "id": "5",
        "name": "robin",
        "grade": "grade 1",
        "marks": 63,
    },
    {
        "id": "2",
        "name": "james",
        "grade": "grade 1",
        "DOB": null,
        "result":"PASS"
    }   
]

内容的提问来源于stack exchange,提问作者monica_s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:55:19