使用 npm 安装 pinyin 包
npm install pinyin
测试数据,使用 pinyin
转换为拼音
const pinyin = require("pinyin");
let poetryAuthorList = ["汉乐府", "两汉乐府", "江景", ];
for (const poetryNameCn of poetryAuthorList) {
let pinyinNames = pinyin(poetryNameCn);
console.log(poetryNameCn, pinyinNames);
}
> node node pinyin_test.js
汉乐府 [ [ 'hàn' ], [ 'lè' ], [ 'fǔ' ] ]
两汉乐府 [ [ 'liǎng' ], [ 'hàn' ], [ 'lè' ], [ 'fǔ' ] ]
江景 [ [ 'jiāng' ], [ 'jǐng' ] ]
多音字设置
let pinyinNames = pinyin(poetryNameCn, { heteronym: true });
> node node pinyin_test.js
汉乐府 [ [ 'hàn' ], [ 'lè', 'yuè', 'yào', 'lào' ], [ 'fǔ' ] ]
两汉乐府 [ [ 'liǎng' ],[ 'hàn' ], [ 'lè', 'yuè', 'yào', 'lào' ], [ 'fǔ' ] ]
江景 [ [ 'jiāng' ], [ 'jǐng', 'yǐng' ] ]
转换拼音风格设置
let pinyinNames = pinyin(poetryNameCn, {style: pinyin.STYLE_NORMAL,});
> node node pinyin_test.js
汉乐府 [ [ 'han' ], [ 'le' ], [ 'fu' ] ]
两汉乐府 [ [ 'liang' ], [ 'han' ], [ 'le' ], [ 'fu' ] ]
江景 [ [ 'jiang' ], [ 'jing' ] ]
> node pinyin_test.js
汉乐府 [ [ 'hàn' ], [ 'lè' ], [ 'fǔ' ] ]
两汉乐府 [ [ 'liǎng' ], [ 'hàn' ], [ 'lè' ], [ 'fǔ' ] ]
江景 [ [ 'jiāng' ], [ 'jǐng' ] ]
> node pinyin_test.js
汉乐府 [ [ 'han4' ], [ 'le4' ], [ 'fu3' ] ]
两汉乐府 [ [ 'liang3' ], [ 'han4' ], [ 'le4' ], [ 'fu3' ] ]
江景 [ [ 'jiang1' ], [ 'jing3' ] ]
> node pinyin_test.js
汉乐府 [ [ 'ha4n' ], [ 'le4' ], [ 'fu3' ] ]
两汉乐府 [ [ 'lia3ng' ], [ 'ha4n' ], [ 'le4' ], [ 'fu3' ] ]
江景 [ [ 'jia1ng' ], [ 'ji3ng' ] ]
> node pinyin_test.js
中国 [ [ 'zh' ], [ 'g' ] ]
汉乐府 [ [ 'h' ], [ 'l' ], [ 'f' ] ]
两汉乐府 [ [ 'l' ], [ 'h' ], [ 'l' ], [ 'f' ] ]
江景 [ [ 'j' ], [ 'j' ] ]
中国 [ [ 'z' ], [ 'g' ] ]
汉乐府 [ [ 'h' ], [ 'l' ], [ 'f' ] ]
两汉乐府 [ [ 'l' ], [ 'h' ], [ 'l' ], [ 'f' ] ]
江景 [ [ 'j' ], [ 'j' ] ]
提取转换后的拼音
for (const poetryNameCn of poetryAuthorList) {
let pinyinNames = pinyin(poetryNameCn, {
style: pinyin.STYLE_NORMAL,
});
console.log(poetryNameCn, pinyinNames.join(""));
}
> node pinyin_test.js
中国 zhongguo
汉乐府 hanlefu
两汉乐府 lianghanlefu
江景 jiangjing
扩展: [JS 数组扁平化]
[ [ 'liang' ], [ 'han' ], [ 'le' ], [ 'fu' ] ] => [ 'liang', 'han', 'le', 'fu' ]
pinyinNames.join(",").split(",")
function flatten(arr) {
return arr.reduce((result, item) => {
return result.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
`${pinyinNames}`.split(",")
[].concat(...pinyinNames)