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

如何在TypeScript中按主数组顺序和子数组排名构建目标数组?

在TypeScript中根据主数组和子集数组生成排名数组

问题描述

给定一个代表目标顺序的主数组:

const main_array = ['a', 'b', 'c', 'd', 'e', 'f'];

以及一个仅包含主数组元素的子集数组(元素顺序任意):

const subset_array = ['d', 'a', 'f'];

需要生成一个与主数组长度一致的排名数组:子集元素按自身顺序对应排名(d为1、a为2、f为3),主数组中不在子集里的元素填0。最终期望结果为:

const desired_array = [2, 0, 0, 1, 0, 3];

解决方案

可以通过建立排名映射表 + 遍历主数组匹配的方式实现,步骤如下:

  1. 构建子集元素的排名映射:利用Map存储子集元素与其对应的排名(子集数组的索引+1,因为排名从1开始)
  2. 遍历主数组生成结果:对主数组的每个元素,从映射表中获取对应的排名,不存在则返回0

完整TypeScript代码:

const main_array = ['a', 'b', 'c', 'd', 'e', 'f'];
const subset_array = ['d', 'a', 'f'];

// 建立子集元素到排名的映射
const rankMap = new Map(subset_array.map((item, idx) => [item, idx + 1]));

// 生成目标排名数组
const desired_array = main_array.map(item => rankMap.get(item) || 0);

console.log(desired_array); // 输出: [2, 0, 0, 1, 0, 3]

代码说明

  • subset_array.map((item, idx) => [item, idx + 1]):将子集数组转换为[元素, 排名]的键值对数组,索引+1是因为排名从1开始
  • new Map(...):将键值对数组转换为Map结构,实现O(1)时间复杂度的元素查找
  • main_array.map(...):遍历主数组的每个元素,从Map中获取排名,若元素不在子集里则返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:01:41