utils.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import toPinyin from "./toPinyin";
  2. /**
  3. * 根据拼音首字母筛选排序分组
  4. * @param {Array} arr 原数组
  5. * @param {String} key 原数组需要筛选的字段
  6. * @returns {Array} 返回一个[{name: A,value: []}] 格式的二维数组
  7. */
  8. export function getGroupByPinyin(arr, key = 'name') {
  9. if(!arr) return
  10. // 获取A-Z字母数组
  11. let keys = [...Array(26).keys()].map((i) => String.fromCharCode(i + 65));
  12. arr = arr.map((n) => ({
  13. ...n,
  14. py: toPinyin.chineseToInitials(
  15. toPinyin.chineseToPinYin(n[key].substr(0, 1))
  16. ),
  17. }));
  18. let group = [];
  19. for (const i of keys) {
  20. // 新数组一级结构,可自行修改
  21. let item = {
  22. name: i,
  23. value: [],
  24. };
  25. for (const j of arr) {
  26. if (j.py === i) {
  27. item.value.push(j);
  28. }
  29. }
  30. if (item.value.length > 0) {
  31. item.value.sort((a, b) => a[key].localeCompare(b[key]));
  32. group.push(item);
  33. }
  34. }
  35. return group;
  36. }