如何在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
相关产品推荐
相关产品推荐

