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

如何将对象数组转为保留子对象的嵌套对象适配Elasticsearch?

解决数组转嵌套对象(保留子对象)的问题

首先得提一句:你给出的目标代码其实存在语法错误——JavaScript对象里不能直接放置未命名的子对象,每个子项都需要有对应的键。结合你提到的Elasticsearch bool查询适配场景,我猜你想要的是把数组里的每个条件对象,作为父对象的带键子项保留下来,而不是合并成一个大对象。

原始数据结构

const obj = {
  "key": [
    { "name": { "companyName": "Something" } },
    { "otherThing": { "coolThing": "coolThingName" } }
  ]
};

符合语法的目标结构

我们可以用数组的索引作为子对象的键,这样既保留了每个子对象的独立性,又转换成了合法的对象格式:

const transformedObj = {
  "key": {
    "0": { "name": { "companyName": "Something" } },
    "1": { "otherThing": { "coolThing": "coolThingName" } }
  }
};

实现代码

这里不用普通的合并式reduce,而是用它来构建一个以索引为键的对象,完美保留每个子对象:

const transformArrayToNestedObj = (data) => {
  return {
    ...data,
    key: data.key.reduce((acc, item, index) => {
      acc[index] = item; // 把每个子对象以索引为键存入结果
      return acc;
    }, {}) // 初始值设为空对象
  };
};

// 调用示例
const originalObj = {"key": [ { "name": { "companyName": "Something" } }, { "otherThing": { "coolThing": "coolThingName" } } ]};
const result = transformArrayToNestedObj(originalObj);
console.log(result);

适配Elasticsearch的特殊调整

如果你的Elasticsearch场景需要特定的键名(而非索引),比如每个子对象里有唯一标识字段,可以修改reduce逻辑提取对应键。比如子对象都有conditionType字段,就可以把acc[index] = item替换成acc[item.conditionType] = item,完全贴合你的业务需求。

这样转换后,每个原数组里的子对象都完整保留,没有被合并,刚好满足你需要的对象格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 08:53:03