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

TypeScript如何优雅将对象内所有数组属性原地转换为Set

TypeScript 原地将对象数组属性转为Set实现

需求说明

需要在不创建新对象的前提下,直接修改原输入对象,将对象中所有存储数组的属性值转换为去重后的Set类型。
给定输入:

const inputObject = {'a': [1, 2, 3], 'b': [2, 2, 2], 'c': [3,3,2,4]};

期望输出(原对象修改后):

{ a: Set(3) { 1, 2, 3 }, b: Set(1) { 2 }, c: Set(3) { 2, 3, 4 } }

最简实现(原地修改)

不需要逐键硬编码转换,直接遍历对象属性原地覆盖即可:

for (const key of Object.keys(inputObject)) {
  const currentVal = inputObject[key as keyof typeof inputObject];
  // 仅对数组类型属性做转换,避免误处理其他类型值
  if (Array.isArray(currentVal)) {
    (inputObject as Record<typeof key, Set<number>>)[key] = new Set(currentVal);
  }
}

效果验证

执行上述代码后直接打印原对象即可得到目标结果:

console.log(inputObject);
// 输出: { a: Set(3) { 1, 2, 3 }, b: Set(1) { 2 }, c: Set(3) { 3, 2, 4 } }

注:部分浏览器控制台打印数字类型Set时会按数值升序展示元素,Set实际存储顺序和原数组元素首次出现顺序一致,去重功能完全匹配需求。

可选极简写法(无类型校验)

如果你能100%确定对象内所有属性都是数组类型,可以省略类型判断,代码更短:

Object.keys(inputObject).forEach(k => (inputObject as any)[k] = new Set((inputObject as any)[k]));

注意:该写法用了any跳过TS类型检查,且没有做数组类型判断,仅适合属性类型完全确定的场景使用。


内容的提问来源于stack exchange,提问作者Anurag A S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:48:34