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

如何深度过滤非数组对象?JS原生函数提取指定属性行键

实现思路与代码方案

没问题,这事儿用JS原生的数组高阶函数就能轻松搞定,针对你的需求,这里提供两种常用的实现方式,附带思路拆解:

方案1:Object.entries() + filter() + map() 组合

这种方式逻辑拆分清晰,可读性强,是比较直观的实现思路:

const table = { 
  row1: { col1: 'A', col2: 'B', col3: 'C' }, 
  row2: { col1: 'D', col2: 'A', col3: 'F' }, 
  row3: { col1: 'E', col2: 'G', col3: 'C' } 
};

const targetRows = Object.entries(table)
  // 过滤出col3等于"C"的键值对
  .filter(([rowKey, rowData]) => rowData.col3 === 'C')
  // 提取符合条件的行键
  .map(([rowKey]) => rowKey);

console.log(targetRows); // 输出: ['row1', 'row3']

步骤拆解:

  1. Object.entries(table):把对象转换为键值对数组,结构为 [['row1', {col1: 'A', ...}], ['row2', ...]],这样就能用数组的高阶函数处理了;
  2. filter():解构出每个项的行键和行数据,判断行数据的col3是否等于"C",只保留符合条件的键值对;
  3. map():从过滤后的键值对中提取出行键,最终得到目标数组。

方案2:Object.keys() + reduce() 一步到位

如果喜欢更简洁的写法,用reduce()可以把过滤和提取合并为一步:

const table = { 
  row1: { col1: 'A', col2: 'B', col3: 'C' }, 
  row2: { col1: 'D', col2: 'A', col3: 'F' }, 
  row3: { col1: 'E', col2: 'G', col3: 'C' } 
};

const targetRows = Object.keys(table).reduce((acc, rowKey) => {
  // 若当前行col3等于"C",就把行键加入累加器
  if (table[rowKey].col3 === 'C') {
    acc.push(rowKey);
  }
  return acc;
}, []); // 初始累加器设为空数组

console.log(targetRows); // 输出: ['row1', 'row3']

步骤拆解:

  1. Object.keys(table):先获取所有行的键数组,比如['row1', 'row2', 'row3'];
  2. reduce():以空数组为初始值,遍历每个行键,判断对应行的col3是否符合条件,符合则将行键推入累加器,最后返回累加器就是结果。

两种方案都能完美满足你的需求,根据自己的代码风格选择即可~

内容的提问来源于stack exchange,提问作者thdoan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:36:06