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

JavaScript面试题:编写函数按name属性合并数组对象的values值

实现思路

核心是按name字段对数组项分组,合并同分组下的values数组即可,具体步骤如下:

  • 用一个Map/普通对象作为临时缓存,key存储name值,value存储对应该name的已合并values数组
  • 遍历原数组所有元素,判断当前元素的name是否已在缓存中存在:
    • 存在则将当前元素的values数组合并入缓存中对应的数组
    • 不存在则将当前name和values存入缓存
  • 最后将缓存中的键值对转换为要求的对象数组格式即可
代码实现(JavaScript版本)

简洁版(用Array.reduce实现)

function mergeValues(arr) {
  const cache = arr.reduce((acc, item) => {
    acc[item.name] = acc[item.name] ? acc[item.name].concat(item.values) : item.values
    return acc
  }, {})
  return Object.keys(cache).map(name => ({ name, values: cache[name] }))
}

兼容边界情况版(处理非法格式、可选去重等场景)

function mergeValues(arr) {
  const cache = new Map()
  for (const item of arr) {
    // 容错:跳过格式错误的数组项
    if (!item?.name || !Array.isArray(item?.values)) continue
    if (cache.has(item.name)) {
      // 如果需要对values去重,可替换为以下写法:
      // cache.set(item.name, [...new Set([...cache.get(item.name), ...item.values])])
      cache.set(item.name, cache.get(item.name).concat(item.values))
    } else {
      cache.set(item.name, [...item.values])
    }
  }
  return Array.from(cache.entries()).map(([name, values]) => ({ name, values }))
}
同类题练习渠道

可以多刷各厂前端面试真题里的数据结构转换类题目,这类题目大多来自实际业务中的数据处理场景,平时写业务代码遇到数组、对象格式转换需求的时候,也可以刻意尝试用不同的实现方法优化,积累手感即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:09:04