首先先感谢美女耐心的帮我看了一个多小时。。真的很感谢。。
好了 说一下本题的需求:
大致是扩展String,完成getSuffixList方法,使其找出所有包含指定后缀的单词,以及记录单词出现的次数,最终返回按倒序排列次数的单词。
例如:
字符串:“careful beautiful beautiful aful careful beautiful”
后缀:ful
输出结果:"beautiful=3,careful=2,aful=1"
String.prototype.getSuffixList = function(suffix){
var result = "";
var reg = new RegExp("^[A-Za-z]+("+suffix+")$");
console.log(reg); // 正则为 /^[A-Za-z]+(ful)$/
var arr = this.split(" "); //将字符串用空格分成数组
var obj = {}; //创建一个对象存放符合的字符串和对应的次数
//知识点1:reg.exec()有一个细节,大概磨蹭了快一个小时,就因为在数组内使用了/g的正则
//reg.exec()在没有/g的情况下匹配当前单词
//reg.exec()在有/g的情况下在字符串内匹配所有单词
for(var i=0;i<arr.length;i++){ //循环遍历数组
let str;
if (reg.exec(arr[i])) {
str = reg.exec(arr[i])[0];
} else {
console.log('-----', arr[i])
}
console.log(str); // 所匹配到的单词
if (!obj[str]) {
obj[str] = 1;
} else { // 原本有该单词则次数+1
obj[str]++;
}
}
console.log(obj); //输出所有匹配的单词及次数
//[object Object] {
// aful: 1,
// beautiful: 3,
// careful: 2
// }
//知识点2:根据对象中的属性进行排序
var c = Object.keys(obj).sort(function(a,b){
return obj[b]-obj[a];
}); //逆序后 返回为数组 ["beautiful", "careful", "aful"]
var array = []; //存放结果数组
if ( c.indexOf('undefined') >= 0) {
c.splice(c.indexOf('undefined'),1);
}
for(var i = 0; i < c.length; i++){
for(var key in obj){
if(c[i] == key){
array.push(key+"="+obj[key]);
break;
}
}
}
return array.join(",");//将结果数组转成字符串用,分割
};
console.log("careful beautiful beautiful aful careful beautiful".getSuffixList('ful'));
网友评论