如何在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 } })
filter方法的回调函数需要返回布尔值,用来决定当前元素是否保留在新数组里,你的代码没有返回值,最终filteredArray会是空数组。delete item是无效操作——item是回调里的局部变量,删除它不会改变原数组,也和filter的逻辑无关。- 你的
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
相关产品推荐
相关产品推荐

