如何将对象中同键的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);
代码说明
- 使用
map遍历数组:map的作用是将数组每个元素转换为新值,正好符合我们需要的合并属性场景 - 可选链
?.:避免当cultures中不存在对应isoCode时出现报错 isoCode格式化:拆分字符串后,第一段保持小写,第二段转为大写,再拼接成目标格式- 扩展运算符
...:复制原对象的所有属性,再覆盖isoCode并添加新的path字段
内容的提问来源于stack exchange,提问作者raf
相关产品推荐
相关产品推荐

