JavaScript filter返回独立对象而非数组,无法获取length的问题
解决JavaScript filter结果无法获取.length的问题
首先明确:Array.filter() 方法的返回值始终是数组,你看到的0: {...}, 1: {...}格式只是控制台对数组的一种键值化展示方式,本质仍然是数组。出现无法获取.length的情况,大概率是以下原因之一,对应解决方法如下:
1. 确认原数据源是数组
先验证kids.inputs是否为标准数组:
console.log(Array.isArray(kids.inputs)); // 输出true才是数组
如果返回false,说明kids.inputs是类数组对象(比如DOM集合、arguments对象等),需要先转为数组再过滤:
// 方法1: 使用Array.from const inputsArray = Array.from(kids.inputs); const pupils = inputsArray.filter(k => k.attendsSchool); const number = pupils.length; // 方法2: 使用扩展运算符 const pupils = [...kids.inputs].filter(k => k.attendsSchool); const number = pupils.length;
2. 无需生成过滤数组,直接统计数量
如果你的需求只是统计符合条件的元素数量,不需要保留过滤后的数组,用Array.reduce()效率更高:
const number = kids.inputs.reduce((total, kid) => { return kid.attendsSchool ? total + 1 : total; }, 0);
验证你的场景
用你提供的示例数据测试,执行原代码后:
const kids = { areaId: "0x2132425", inputs: [ { name: "anne", attendsSchool: true }, { name: "bob", attendsSchool: true }, { name: "charlie", attendsSchool: false } ] }; const pupils = kids.inputs.filter(k => k.attendsSchool); console.log(pupils.length); // 输出2,完全正常
你看到的0: {...}, 1: {...}是控制台对数组的展开显示,实际pupils是标准数组,length属性可以正常使用。
内容的提问来源于stack exchange,提问作者Jo1234
相关产品推荐
相关产品推荐

