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

Snaplogic:在Mapper Snap中同时使用mapValue与mapKey函数的问题

实现Salesforce字段名处理与日期时区转换的JQ方案

从Salesforce导出的文档有两个格式需求:

  • 移除字段名的__c后缀并全部转为小写
  • 将UTC格式的日期字段(比如CreatedDate)转换为US/Eastern时区

当前尝试用mapKeys和mapValues组合处理,但代码无法同时满足两个需求:

$.mapKeys((value, key)=>key.endsWith('__c')
  ? key.replace('__c','').toLowerCase()
  :key.toLowerCase())
    &&  
 $.mapValues((value, key) => key.toLowerCase().search("createddate") >=0 && value !=null
  ?  Date.parse(value).toLocaleDateTimeString({"timeZone":"US/Arizona"})
   :value) 

调换操作顺序或修改逻辑运算符后,始终只能生效一个处理逻辑,以下是解决方案:

问题原因

你用&&连接两个JQ操作是错误的,JQ需要用管道符|来链式执行操作——先处理字段名,再基于处理后的字段名处理日期值。另外代码里时区写的是US/Arizona,和需求的US/Eastern不符,日期处理的语法也存在问题。

修正后的代码

$.mapKeys((value, key) => 
  key.endsWith('__c') ? key.replace('__c', '').toLowerCase() : key.toLowerCase()
) | .mapValues((value, key) => 
  key == "createddate" && value != null 
    ? new Date(value).toLocaleDateTimeString("en-US", { timeZone: "US/Eastern" })
    : value
)

代码说明

  1. 字段名处理:通过mapKeys遍历所有字段,移除__c后缀并统一转为小写
  2. 链式传递:用|将处理完字段名的对象传给mapValues,保证后续操作基于新的字段名执行
  3. 日期转换:判断当前字段是否是处理后的createddate,若值不为空,先把UTC字符串转为Date对象,再用toLocaleDateTimeString转换为US/Eastern时区的可读日期字符串
  4. 非日期字段:保持原有值不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:42:50