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

ReactJS中如何对带有id键的嵌套对象进行过滤和排序?

问题原因

你给出的people初始结构不符合JavaScript语法规范:数组中不能直接使用1:{...}、2:{...}这类键值对写法,你要保留顶层id作为索引键的话,people应该定义为对象类型,而非数组类型,这就是你原有代码不生效的核心原因。

解决方案

方案1:修正people为对象类型(保留顶层id键)

首先把people的外层括号从数组的[]改为对象的{}:

const people = {
  1:{
    id : 1,
    name: 'James',
    age: 31,
    toBeDeleted: false,
    position: 2
  },
  2:{
    id : 2,
    name: 'John',
    age: 45,
    toBeDeleted: true,
    position: 3
  },
  3:{
    id : 3,
    name: 'Paul',
    age: 65,
    toBeDeleted: false,
    position: 1
  }
};

你原有处理逻辑无需修改,直接运行即可得到预期结果:

const sorted = Object.values(people)
  .filter(item => item.toBeDeleted !== true)
  .sort((a, b) => a.position - b.position);

输出的sorted就是你需要的目标数组:

[
  {
    id: 3,
    name: 'Paul',
    age: 65,
    toBeDeleted: false,
    position: 1
  },
  {
    id: 1,
    name: 'James',
    age: 31,
    toBeDeleted: false,
    position: 2
  }
]

后续你需要通过id选中记录时,直接用people[id]即可调用对应记录。

方案2:保留people为数组类型,单独维护id映射表

如果你有其他逻辑需要people保持数组结构,可以单独生成id与记录的映射表,满足快速选中记录的需求:

// 数组格式的people
const people = [
  {
    id : 1,
    name: 'James',
    age: 31,
    toBeDeleted: false,
    position: 2
  },
  {
    id : 2,
    name: 'John',
    age: 45,
    toBeDeleted: true,
    position: 3
  },
  {
    id : 3,
    name: 'Paul',
    age: 65,
    toBeDeleted: false,
    position: 1
  }
];

// 生成id映射表,支持通过id快速查找记录
const peopleIdMap = new Map(people.map(item => [item.id, item]));
// 调用示例:获取id为1的记录:peopleIdMap.get(1)

之后用你原有逻辑直接处理数组即可正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:24:02