问题描述:输入一个数组arr = ['1a', '2b', '3c', '5a'],输出其中出现次数最多的字母前面的数字之和,如arr,输出应为:出现次数最多的字母为a,数字和为6. 用js实现。
思路:两个函数:排序函数jsSort(obj), 处理函数letterSum(arr).
//冒泡排序实现对象按值排序,返回排序好的对象
function jsSort(obj) {
var keyArr = [];
var valArr = [];
var res = {};
for(var key in obj) {
keyArr.push(key);
valArr.push(obj[key]);
}
for(var i = 0; i < valArr.length; i++) {
for(var j = 0; j < valArr.length - 1; j++) {
var keyTmp, valTmp;
if(valArr[j] < valArr[j + 1]) {
keyTmp = keyArr[j];
keyArr[j] = keyArr[j + 1];
keyArr[j + 1] = keyTmp;
valTmp = valArr[j];
valArr[j] = valArr[j + 1];
valArr[j + 1] = valTmp;
}
}
}
for(var i = 0; i < valArr.length; i++) {
res['"' + keyArr[i] + '"'] = valArr[i];
}
return res;
}
function letterSum(arr) {
var res = {};
var maxLetter;
for(var i = 0; i < arr.length; i++) {
var c = [];
c = arr[i].split("");
if(!(res.hasOwnProperty(c[1]))) {
res[c[1]] = parseInt(c[0]);
}
else {
res[c[1]] += parseInt(c[0]);
}
} //对象构建完毕,之后按值排序输出值最大的键值
res = jsSort(res);
maxLetter = Object.keys(res)[0];
console.log("出现最多的字母为" + maxLetter + "," + "数字和为" + res[maxLetter]);
}
var arr = ["1a", "2b", "3c", "5a"];
letterSum(arr);
输出: