描述:
给到两个字符集合,一个是全量字符集,一个是已占用字符集,求输出剩余可用字符集。
输入描述:
输入一串字符串,一定包含@,@前为全量字符集,@后为已占用字符集,已占用字符集一定是全量字符集中的字符
输入实例 'a:3,b:5,c:2@a:1,b:2'
输出剩余可用字符集如:'a:2,b:3,c:2'
若某个字符已全部占用,则不需要再输出
先用两个数组分别接收全量字符集和已占用字符集
再用map结构接收如 'a':'3' 的两个字符集
遍历已占用字符集,在全量字符集找到对应的进行减法
最后转换成数组,过滤变成0的输出
本文记录本人的撰写内容,若有不足之处,请指教。
let STR = 'a:3,b:5,c:2@a:1,b:2,c:2'
function strOccupy(str){
// 全量字符集full,已占用字符集occpy
// [a:3,b:5,c:2],[a:1,b:2]
// 对象接收{} 循环对比
let full = new Map()
let occupy = new Map()
let full0 = str.split('@')[0].split(',') //['a:3','b:5','c:2']
let occupy0 = str.split('@')[1].split(',')
full0.map(value=>{
let attr = value.split(':')
full.set(attr[0],parseInt(attr[1])) // 键值对结构 { key : value,... }
})
occupy0.map(value=>{
let attr = value.split(':')
occupy.set(attr[0],parseInt(attr[1]))
})
for(let key of occupy.keys()){
if(full.has(key)){ // full内有occupy的key,说明被占用
full.set(key, full.get(key) - occupy.get(key))
}
}
let rest = Array.from(full) //类数组转换成数组
let out = []
rest.forEach(value=>{ //直接改变数组
if(value[1]!=0){
value = value[0] + ':' + value[1]
out.push(value)
}
})
console.log(out.join(','));
}
strOccupy(STR)
该文章介绍了一个JavaScript函数,用于处理两个字符集合:全量字符集和已占用字符集。函数通过Map数据结构存储集合,遍历并更新已占用字符集在全量字符集中对应的数量,最后输出剩余可用字符集。示例代码展示了如何处理输入字符串并输出结果。
44万+





