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

如何用JS将数组中同name属性的对象title值合并生成动态变量

实现方案

核心思路

先将原数组按name属性分组,收集同一name对应的所有title值,再将每组的title用|拼接后生成变量。

完整代码

// 1. 实际使用时把下方数组替换为你自己的数组a即可
const a = [
  { name: 'Size', title: 'M' },
  { name: 'Size', title: 'L' },
  { name: 'Size', title: 'XL' },
  { name: 'Size', title: '2XL' },
  { name: 'Size', title: '3XL' },
  { name: 'select your fit', title: 'Regular' },
  { name: 'select your fit', title: 'Extra Soft' },
  { name: 'select your fit', title: 'Premium' }
];

// 2. 按name属性分组,同时将name去除空格转换为合法变量名
const grouped = a.reduce((result, item) => {
  const varName = item.name.replace(/\s+/g, '');
  if (!result[varName]) {
    result[varName] = [];
  }
  result[varName].push(item.title);
  return result;
}, {});

// 3. 生成动态变量+输出预期格式
for (const [varName, titleList] of Object.entries(grouped)) {
  const value = titleList.join(' | ');
  // 挂载到window成为全局变量,可直接调用Size、selectyourfit等
  window[varName] = value;
  // 控制台打印你需要的输出格式
  console.log(`var ${varName} = ${value}`);
}

补充说明

  • 你之前的代码问题在于仅比对了相邻元素的name,没有做同组title的收集和拼接逻辑,所以无法得到预期结果。
  • 上述reduce实现的分组不依赖原数组的排序,就算同name的元素不连续也能正确分组,稳定性更高。
  • 如果不想污染全局作用域,可以直接使用grouped对象取值,比如grouped.Size就能拿到拼接后的尺码值,还能避免变量名冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:57:03