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

如何根据userdetails数组的name键排序marks对象数组

按指定数组的name顺序排序对象数组

现有两个对象数组:

const marks = [{name: "siva", value: "200"}, {name: "sai", value: "300"}, {name: "varma", value: "400"}]
const userdetails =  [{name: "varma", id: "012"},{name: "siva", id: "017"}, {name: "sai", id: "016"}]

需要将marks数组按照userdetails数组中name字段的顺序重新排序,预期输出如下:

const updatedmarks = [{name: "varma", value: "400"},{name: "siva", value: "200"}, {name: "sai", value: "300"}]

解决方案

先构建一个name到其在userdetails中位置索引的映射表,再利用这个映射表对marks数组排序,具体实现如下:

// 生成name与对应索引的映射,提升排序时的查找效率
const nameOrderMap = userdetails.reduce((mapping, item, idx) => {
  mapping[item.name] = idx;
  return mapping;
}, {});

// 复制原数组并排序,避免修改原数组(若无需保留原数组,可直接用marks.sort(...))
const updatedmarks = [...marks].sort((a, b) => nameOrderMap[a.name] - nameOrderMap[b.name]);

说明

  • reduce方法遍历userdetails生成映射表,后续排序时通过映射表获取索引的时间复杂度为O(1),整体排序效率更高
  • 使用扩展运算符[...marks]创建原数组的浅拷贝,保证原数组不被修改
  • sort回调中通过对比两个元素name对应的索引值,实现按照userdetails的顺序排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:09:10