如何避免键重复?将serialNumbers数组转换为指定结构对象
实现按Lot分组Serial的解决方案
我懂你想要的效果——把相同Lot对应的Serial都归到一起,形成一个以Lot为键、对应多个Serial值的对象对吧?你现在的代码会把每一条数据都生成独立的键值对,没法实现分组,咱们来改改:
修改后的代码
// 用普通对象来存储分组结果,而不是数组 const groupedSerials = {}; if (serialNumbers.length > 0) { for (const item of serialNumbers) { const lot = item.value.lot; const serial = item.value.serial; // 检查当前lot是否已经在分组对象里 if (!groupedSerials[lot]) { // 不存在的话,初始化一个空数组 groupedSerials[lot] = []; } // 把当前serial推到对应lot的数组里 groupedSerials[lot].push(serial); } }
效果示例
比如你提到的第一种数据情况:lot: 1 Serial: 2、lot: 1 Serial: 3、lot: 1 Serial: 4,处理后groupedSerials会是:
{ "1": [2, 3, 4] }
第二种数据情况:lot: 1 Serial: 5、lot: 1 Serial: 9、lot: 8 Serial: 2、lot: 8 Serial: 4,处理后结果是:
{ "1": [5, 9], "8": [2, 4] }
补充说明
- 这里用
const替代了var,是更现代的JS写法,能避免变量提升带来的潜在问题 - 分组对象的键默认是字符串类型(JS对象的键会自动转成字符串),如果需要数值类型的键,后续可以再做类型转换
- 如果最终需要数组形式的键值对(比如
[{key: "1", value: [2,3,4]}]),可以用Object.entries(groupedSerials).map(([key, value]) => ({key, value}))来转换
内容的提问来源于stack exchange,提问作者LeeMe
相关产品推荐
相关产品推荐

