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

如何标准化JavaScript对象数组的键,补全GraphQL响应缺失的null值对应键

解决方法

1. JavaScript侧统一键实现

这种方案不依赖数据源配置,适配任意可变结构的GraphQL返回结果:

实现逻辑

  • 遍历整个对象数组,收集所有出现过的字段名,去重得到全量字段集合
  • 遍历数组中的每一个对象,为缺失的字段补默认值(可自定义为null、空字符串等)
  • 处理后所有对象的字段完全对齐,第一个元素自然包含全量字段,满足报表组件要求

代码示例

/**
 * 标准化对象数组的字段
 * @param {Array} arr 原始对象数组
 * @param {any} defaultValue 缺失字段的默认值,默认为null
 * @returns {Array} 标准化后的对象数组
 */
function normalizeFields(arr, defaultValue = null) {
  // 边界判断:非数组或空数组直接返回
  if (!Array.isArray(arr) || arr.length === 0) return arr;

  // 收集所有唯一字段
  const allFields = new Set();
  arr.forEach(item => {
    if (item && typeof item === 'object') {
      Object.keys(item).forEach(field => allFields.add(field));
    }
  });
  const fieldList = [...allFields];

  // 补全每个对象的缺失字段
  return arr.map(rawItem => {
    const normalizedItem = { ...rawItem };
    fieldList.forEach(field => {
      if (!(field in normalizedItem)) {
        normalizedItem[field] = defaultValue;
      }
    });
    return normalizedItem;
  });
}

// 使用示例
const rawResponse = [
  // 你的原始Hasura返回结果
];
const reportDataSource = normalizeFields(rawResponse);

2. Hasura 原生配置方案(无需JS处理)

Hasura默认省略null值字段,可通过以下任意一种配置开启保留null字段的特性:

  • 请求参数配置:调用Hasura GraphQL接口时,在URL后追加查询参数?includeNulls=true
  • 请求头配置:在请求头中添加字段 X-Hasura-Include-Nulls: true

开启后返回的结果会自动保留所有查询的字段,值为null的字段不会被省略,无需额外做字段对齐处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:30:02