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

使用JSONata实现按time匹配并计算value/value_2的结果

JSONata:按时间合并二维数组并计算比值

输入数据

[[
  {
    "time": "2024-04-26",
    "value": 40
  },
  {
    "time": "2024-04-27",
    "value": 10
  },
  {
    "time": "2024-04-28",
    "value": 20
  }
],
[
  {
    "time": "2024-04-26",
    "value_2": 5
  },
  {
    "time": "2024-04-27",
    "value_2": 2
  },
  {
    "time": "2024-04-28",
    "value_2": 4
  }
]]

需求

提取唯一的time值,将对应value与value_2做除法运算,生成包含time和计算后结果的对象数组。

错误尝试及问题分析

你使用的原表达式:

$type($) = 'array' ? 
(($count($) ) > 0 ? 
$map($[0], function($v, $i, $a) 
{ { "time": $v.time, 
"value": $v.value/ $v.value_2 } })[]: []): undefined 

输出仅保留time字段的原因是:遍历的是第一个子数组$[0],其中的对象只有value属性,没有value_2,$v.value_2为undefined,导致除法结果失效,最终仅保留了存在的time字段。

正确表达式

方案一(适用于两个子数组time顺序完全一致)

$map($[0], function($item, $index) {
  {
    "time": $item.time,
    "value": $item.value / $[1][$index].value_2
  }
})
逻辑说明
  • 遍历第一个子数组的每个元素,通过遍历索引$index直接匹配第二个子数组对应位置的元素
  • 取出对应位置的value和value_2进行除法计算,生成目标对象

方案二(通用版,适用于time顺序不一致的场景)

如果两个子数组的time顺序可能不同,用$lookup按time精准匹配:

$merge([$[0], $[1]]){
  "time": $,
  "value": $lookup($[0], "time", $).value / $lookup($[1], "time", $).value_2
} ~> $sort("time")
逻辑说明
  1. 合并两个子数组的所有对象
  2. 按time字段分组,对每组取出对应value和value_2计算比值
  3. 最后按time排序,保证输出顺序统一

验证输出

两种方案均可得到你期望的结果:

[
  {
    "time": "2024-04-26",
    "value": 8
  },
  {
    "time": "2024-04-27",
    "value": 5
  },
  {
    "time": "2024-04-28",
    "value": 5
  }
]

内容的提问来源于stack exchange,提问作者Imaginary-Pea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:36:17