SuiteScript Map/Reduce脚本中无法定义Map对象的问题咨询
问题原因
SuiteScript的Map/Reduce脚本是服务器端运行的,NetSuite服务器上的JavaScript引擎基于旧版本,不支持ES6新增的Map对象;而Client Script在用户浏览器里执行,现代浏览器都兼容ES6特性,所以相同代码在客户端能正常运行。
替代方案
方案1:用普通JavaScript对象(最常用)
普通对象的键值对可以满足绝大多数场景的存储需求,直接替换Map的用法:
try{ var myMap = {}; // 替换new Map() log.debug('myMap', myMap); var val1 = searchresult[0].getValue('id1'); var val2 = searchresult[1].getValue('id2'); myMap[val1] = val2; // 替换Map.set(val1, val2) log.debug('myMap - set', myMap); // 取值时用 myMap[val1] 替换Map.get(val1) var retrievedVal = myMap[val1]; log.debug('retrieved value', retrievedVal); } catch(e){ log.error('error', e); }
方案2:用数组存储键值对(处理非字符串键场景)
如果你的键不是字符串类型(比如数字、对象),普通对象会自动把键转为字符串,这时可以用数组存储键值对的结构来实现:
try{ var myMap = []; // 用数组存储每个键值对对象 log.debug('myMap', myMap); var val1 = searchresult[0].getValue('id1'); var val2 = searchresult[1].getValue('id2'); // 添加键值对 myMap.push({key: val1, value: val2}); log.debug('myMap - set', myMap); // 自定义取值方法 function getMapValue(map, targetKey) { for(var i = 0; i < map.length; i++){ if(map[i].key === targetKey){ return map[i].value; } } return null; } var retrievedVal = getMapValue(myMap, val1); log.debug('retrieved value', retrievedVal); } catch(e){ log.error('error', e); }
内容的提问来源于stack exchange,提问作者steve ax221
相关产品推荐
相关产品推荐

