如何移除数组中无用对象并返回指定结构?代码调试求助
问题解决:过滤对象数组中的无用元素
你的核心问题是对Array.filter()的用法理解有误——filter的回调函数需要返回布尔值来决定是否保留当前元素,而不是返回对象。同时原判断条件first && last会误删值为空字符串的合法对象(比如你示例中的{first: '', last: ''}),不符合你的需求。
需求拆解
需要保留的对象必须同时满足:
- 不是空对象
{} - 包含
first属性(无论值是否为空) last属性的值不等于undefined
修正后的代码
// 先过滤出符合条件的对象,再提取first和last属性 const filtered = values?.invites?.filter(obj => { // 排除空对象 if (Object.keys(obj).length === 0) return false; // 必须包含first属性 if (!('first' in obj)) return false; // last不能是undefined return obj.last !== undefined; }).map(({ first, last }) => ({ first, last }));
或者用reduce一步完成过滤和提取,减少一次遍历:
const filtered = values?.invites?.reduce((acc, obj) => { if (Object.keys(obj).length > 0 && 'first' in obj && obj.last !== undefined) { acc.push({ first: obj.first, last: obj.last }); } return acc; }, []);
代码说明
Object.keys(obj).length > 0:判断对象不是空对象'first' in obj:检查对象是否包含first属性(即使属性值为空也符合要求)obj.last !== undefined:确保last属性的值不是undefined- 最后用
map(或reduce里的push)提取需要的first和last属性,得到最终的目标数组
内容的提问来源于stack exchange,提问作者letters
相关产品推荐
相关产品推荐

