如何在JavaScript中实现对象数组的规则聚合与数据校验
数组对象values字段按规则聚合实现
实现思路
- 首先遍历数组所有元素的
values字段,统计每个键的非空值出现次数,同时记录仅出现一次的非空值内容 - 随后基于统计结果生成最终聚合对象:若键对应的非空值出现次数大于1,赋值为空串;否则直接使用记录的非空值
完整实现代码
// 示例输入 let userValues = [ { "userId": "810", "values": { "21866": "Russia", "21867": "Dog", "21868": "" }, }, { "userId": "811", "values": { "21866": "UAE", "21867": "", "21868": "cheddar cheese" }, } ] function aggregateValues(arr) { const keyStats = {} // 第一步:统计所有key的非空值出现次数和对应值 arr.forEach(item => { const values = item.values || {} Object.keys(values).forEach(key => { const val = values[key] // 过滤空值:空字符串、null、undefined都判定为空 if (val === '' || val == null) return if (!keyStats[key]) { keyStats[key] = { count: 1, value: val } } else { keyStats[key].count += 1 } }) }) // 第二步:生成聚合结果 const result = {} Object.keys(keyStats).forEach(key => { result[key] = keyStats[key].count > 1 ? '' : keyStats[key].value }) return result } // 测试输出 let aggregatedValue = aggregateValues(userValues) console.log(aggregatedValue) // 输出和示例一致:{ '21866': '', '21867': 'Dog', '21868': 'cheddar cheese' }
适配说明
代码默认将null、undefined、空字符串都判定为空值,如果业务里的空值判定规则有差异,直接修改代码里的空值判断逻辑即可。
内容的提问来源于stack exchange,提问作者Subee Na
相关产品推荐
相关产品推荐

