做一个学做普通的app,里面有这个加声调的需求
var toneMap = {
"ā": "1",
"á": "2",
"ǎ": "3",
"à": "4",
"ō": "1",
"ó": "2",
"ǒ": "3",
"ò": "4",
"ē": "1",
"é": "2",
"ě": "3",
"è": "4",
"ī": "1",
"í": "2",
"ǐ": "3",
"ì": "4",
"ū": "1",
"ú": "2",
"ǔ": "3",
"ù": "4",
"ü": "0",
"ǖ": "1",
"ǘ": "2",
"ǚ": "3",
"ǜ": "4",
"ń": "2",
"ň": "3",
"": "2"
};
var toneMap1 = {
"ā": "a",
"á": "a",
"ǎ": "a",
"à": "a",
"ō": "o",
"ó": "o",
"ǒ": "o",
"ò": "o",
"ē": "e",
"é": "e",
"ě": "e",
"è": "e",
"ī": "i",
"í": "i",
"ǐ": "i",
"ì": "i",
"ū": "u",
"ú": "u",
"ǔ": "u",
"ù": "u",
"ü": "u",
"ǖ": "u",
"ǘ": "u",
"ǚ": "u",
"ǜ": "u",
"ń": "n",
"ň": "n",
"": "m"
};
最主要的就是根据这两个东西进行转化,过程很简单,直接留个代码方便以后查看
//pinyin_dict_withtone拼音库文件
var temp = pinyin_dict_withtone.split(',');
console.log(temp)
let newArr = []
for (var i = 0; i < temp.length; i++) {
// 这段代码耗时28毫秒左右,对性能影响不大,所以一次性处理完毕
// dict.withtone[String.fromCharCode(i + 19968)] = temp[i]; // 这里先不进行split(' '),因为一次性循环2万次split比较消耗性能
if (temp[i].indexOf(" ") == "-1") {
if(newArr.indexOf(temp[i])=='-1'){
newArr.push(temp[i])
}
}
console.log(newArr)
}
document.write(newArr.sort())
console.log(newArr)
let objnew ={}
newArr.forEach(item => {
for (let i = 0; i < item.length; i++) {
if (toneMap[item[i]]) {
let key= ''
let key1= ''
item[i] = toneMap1[item[i]]
key1 =item + "" + toneMap[item[i]]
key= key1.replace(item[i],toneMap1[item[i]])
objnew[key] = item
}
}
})
console.log(objnew)
然后最后就是文件的永久保存,应为循环量比较大,所以选择的是生成一个json库,然后直接拿来用,最后就是js保存文件的方法
function fake_click(obj) {
var ev = document.createEvent("MouseEvents");
ev.initMouseEvent(
"click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null
);
obj.dispatchEvent(ev);
}
function download(name, data) {
var urlObject = window.URL || window.webkitURL || window;
var downloadData = new Blob([data]);
var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
save_link.href = urlObject.createObjectURL(downloadData);
save_link.download = name;
fake_click(save_link);
}
//调用方法
download("save.json", JSON.stringify(objnew));