如何仅获取数组的属性(而非元素值)?
如何仅获取数组的自定义属性
在JavaScript中,数组本质也是对象,因此可以同时拥有数组元素(数字索引对应的键值对)和自定义属性(字符串/非有效数字索引的键值对)。要单独获取这些自定义属性,有以下几种常用方法:
方法一:使用Object.keys() + 过滤有效索引
Object.keys()会返回对象的所有可枚举自有键,我们只需过滤掉那些属于数组有效索引的键即可:
var array = []; array['test1'] = 'property 1'; array['test2'] = 'property 2'; array[0] = 'value 1'; array[1] = 'value 2'; // 筛选出非数组索引的属性键 const propertyKeys = Object.keys(array).filter(key => { const index = parseInt(key, 10); // 有效数组索引的判断:能转为整数、字符串形式与原键一致、且小于数组length return isNaN(index) || index.toString() !== key || index >= array.length; }); // 获取属性值 propertyKeys.forEach(key => { console.log(array[key]); // 输出:property 1、property 2 });
方法二:使用for...in循环 + 过滤
通过for...in遍历对象的可枚举键,结合hasOwnProperty确保是自有属性,再过滤有效索引:
var array = []; array['test1'] = 'property 1'; array['test2'] = 'property 2'; array[0] = 'value 1'; array[1] = 'value 2'; for (const key in array) { if (array.hasOwnProperty(key)) { const index = parseInt(key, 10); if (isNaN(index) || index.toString() !== key || index >= array.length) { console.log(array[key]); // 输出:property 1、property 2 } } }
补充说明
数组的有效索引需满足:是0到2^32 - 2之间的整数,且键的字符串形式与整数转换后的字符串完全一致(比如'1'是有效索引,而'01'不是)。符合这个条件的键会被视为数组元素,影响数组的length属性;其余键则属于自定义属性,不会影响length。
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

