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

如何在Apps Script中快速去除对象重复键(保留首个)

需求说明

我有如下对象:

name_details = { 'Quantity based detail': 'X13', 'Comms+excess': 'X14' , 'normal_detail': 'X15', 'Flat_detail': 'X16', 'Quantity based detail': 'X17'}

期望输出为:

name_details = { 'Quantity based detail': 'X13', 'Comms+excess': 'X14' , 'normal_detail': 'X15', 'Flat_detail': 'X16'}

要求保留重复键的首个条目,删除后续重复键的条目,使对象仅含唯一键。我知道数组去重的简短写法:

var new_array = [...new Set(old_array)];

请告知如何用少量代码在Apps Script中实现该需求。

简短实现方案

在Apps Script中,可以结合Object.entries()、Array.reduce()和Map实现,代码如下:

const name_details = { 'Quantity based detail': 'X13', 'Comms+excess': 'X14' , 'normal_detail': 'X15', 'Flat_detail': 'X16', 'Quantity based detail': 'X17'};
// 生成去重后的对象
const uniqueNameDetails = Object.fromEntries(
  Object.entries(name_details).reduce((map, [key, value]) => {
    return map.has(key) ? map : map.set(key, value);
  }, new Map())
);

console.log(uniqueNameDetails);

补充说明

  • 注意:JavaScript原生对象字面量中重复的键会被后续值直接覆盖,所以如果你的原始对象是直接通过字面量定义的,实际运行时'Quantity based detail'的值已经是X17了。如果数据源是有序键值对序列(比如CSV解析结果、接口返回的键值列表),可以直接将该序列传入reduce处理,无需先转成对象。
  • Map会保留键的插入顺序,reduce遍历过程中只会保留首次出现的键值对,最后通过Object.fromEntries()将Map转回普通对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:10:39