最近在看华为的面试题,这面文章给出了磁盘容量排序的js解题思路,网上的答案很多了,但大部分都是c的,可以看看javascript的代码
题目
磁盘的容量单位有M,G,T这三个等级,他们之间的换算关系为:1T=1024G,1G=1024M
现在给定N块磁盘的容量,请对他们按从小到大的顺序进行稳定排序(注意单位可以重复出现)- 例如给定
5
块盘容量:1T,20M,3G,10G6T,3M12G9M,12M12G
- 排序后的结果为: 20M,3G,3M12G9M,12M12G,1T,10G6T
代码
var n = 6;
var arr = ["1T", "20M", "3G", "10G6T", "3M12G9M", "12M12G"];
function splitByUnit(item) {
var item_arr = item.split("");
item_arr = item_arr.map((i) => {
if (/\d/g.test(i)) {
return parseInt(i);
}
return i;
});
let result = [],
flag = true,
obj = {
value: "",
unit: "",
};
for (let x = 0; x < item_arr.length; x++) {
let data = item_arr[x];
if (/\d/.test(data)) {
obj.value = obj.value + "" + data;
} else {
obj.unit = data;
result.push(JSON.parse(JSON.stringify(obj)));
obj.value = "";
obj.unit = "";
}
}
return result
}
function computeValue(arr) {
let result = 0;
arr.forEach((element) => {
let val = parseInt(element.value);
let unit = 1;
if (element.unit === "M") {
unit = 1;
} else if (element.unit === "G") {
unit = 1024;
} else {
unit = 1024 * 1024;
}
result += val * unit;
});
return result
}
arr.sort((item2,item1)=>{
return computeValue(splitByUnit(item2)) - computeValue(splitByUnit(item1))
})
console.log(arr);