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

如何将对象中同键的path字段合并到对象数组中?

如何将对象中对应键的path字段合并到对象数组中?

需求说明

需要把cultures对象中,与lang数组元素isoCode匹配的path字段,合并到lang的每个对象中,同时将isoCode格式转换为en-US这类大小写混合的形式。

原代码问题分析

你用filter的思路完全错了:

  • filter是用来筛选数组元素的,不是做对象属性合并的
  • 比较逻辑错误:item.isoCode === data.cultures[item.isoCode]是把字符串和对象做对比,必然返回false
  • 内部创建的arr数组没有任何实际作用,整个filter调用不会输出你想要的结果

正确实现代码

const cultures = {
  "en-us": {
    "path": "/en/playground/copy/",
    "startItem": {
      "id": "8cd7943c-1ba5-41cb-a9ac-7435fbdb1458",
      "path": "path"
    }
  },
  "da-dk": {
    "path": "/playground/copy/",
    "startItem": {
      "id": "8cd7943c-1ba5-41cb-a9ac-7435fbdb1458",
      "path": "path"
    }
  }
};

const lang = [
  {
    name: 'English',
    isoCode: 'en-us',
    url: '/en/'
  },
  {
    name: 'Danish',
    isoCode: 'da-dk',
    url: '/'
  }
];

// 合并并格式化的核心逻辑
const mergedLang = lang.map(item => {
  // 从cultures中取出对应isoCode的path
  const targetPath = cultures[item.isoCode]?.path;
  // 把isoCode转换成en-US的格式
  const formattedIso = item.isoCode.split('-').map((part, idx) => 
    idx === 0 ? part.toLowerCase() : part.toUpperCase()
  ).join('-');

  // 返回合并后的新对象
  return {
    ...item,
    isoCode: formattedIso,
    path: targetPath
  };
});

console.log(mergedLang);

代码说明

  1. 使用map遍历数组:map的作用是将数组每个元素转换为新值,正好符合我们需要的合并属性场景
  2. 可选链?.:避免当cultures中不存在对应isoCode时出现报错
  3. isoCode格式化:拆分字符串后,第一段保持小写,第二段转为大写,再拼接成目标格式
  4. 扩展运算符...:复制原对象的所有属性,再覆盖isoCode并添加新的path字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:02:56