如何在JSONata中将值数组转换为含占位属性的对象
问题描述
需要将如下数组结构:
[ "apple", "banana", "carrot" ]
转换为键值对对象结构:
{ "apple": "null", "banana": "null", "carrot": "null" }
由于运行环境是基于键名而非值来实现特定功能,尝试用JavaScript风格的$reduce函数实现转换,代码如下:
$reduce($$, function($acc, $cur) { $acc[$cur] = 'null' }, {})
但上述代码仅返回false,查阅相关文档后未找到合适的对象构建方法,寻求解决办法。
解决方案
问题出在$reduce的回调函数没有返回更新后的累加器。很多自定义或专用运行环境中的reduce实现要求回调必须返回累加器,否则会默认返回false或未定义值。
修改代码,在回调末尾返回累加器$acc即可:
$reduce($$, function($acc, $cur) { $acc[$cur] = 'null' return $acc // 必须返回更新后的累加器 }, {})
如果你的运行环境支持ES6箭头函数和扩展运算符,也可以用更简洁的写法:
$$.reduce((acc, cur) => ({...acc, [cur]: 'null'}), {})
不过第一种写法兼容性更好,适配大部分要求返回累加器的reduce实现。
内容的提问来源于stack exchange,提问作者bigbaws225
相关产品推荐
相关产品推荐

