如何从包含颜色与数值的字符串数组中提取各颜色对应最大值条目
实现思路
- 遍历数组每一项,拆分字符串得到颜色名和对应的数值
- 用映射表(对象/Map)存储每个颜色当前的最大数值对应条目,遍历过程中如果遇到同颜色的更高数值条目,直接更新映射表对应值
- 遍历完成后提取映射表的所有value,即可得到目标结果
代码实现
基础版本
const array = ["Black 1", "Black 4", "Green 2", "Green 8", "Green 6", "Green 3", "Yellow 2"] const maxMap = {} array.forEach(item => { const [color, numStr] = item.split(' ') const currentNum = Number(numStr) // 映射表无当前颜色 或 当前数值大于已存储的最大数值 则更新 if (!maxMap[color] || currentNum > Number(maxMap[color].split(' ')[1])) { maxMap[color] = item } }) const result = Object.values(maxMap) // 输出:["Black 4", "Green 8", "Yellow 2"]
优化版本(减少重复拆分字符串,性能更好)
const array = ["Black 1", "Black 4", "Green 2", "Green 8", "Green 6", "Green 3", "Yellow 2"] const maxMap = {} array.forEach(item => { const [color, numStr] = item.split(' ') const currentNum = Number(numStr) if (!maxMap[color] || currentNum > maxMap[color].num) { maxMap[color] = { num: currentNum, originItem: item } } }) const result = Object.values(maxMap).map(entry => entry.originItem)
内容的提问来源于stack exchange,提问作者Everard Broussard
相关产品推荐
相关产品推荐

