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

如何仅获取数组的属性(而非元素值)?

如何仅获取数组的自定义属性

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:10:02