dealData.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // 获取所有的叶子节点
  2. export const getLeafNodes = (tree) => {
  3. const leafNodes = []
  4. function traverse(node) {
  5. if (!node.children || node.children.length === 0) {
  6. leafNodes.push(node)
  7. } else {
  8. for (let child of node.children) {
  9. traverse(child)
  10. }
  11. }
  12. }
  13. // 开始遍历
  14. if (!tree?.length) return []
  15. for (let rootNode of tree) {
  16. traverse(rootNode)
  17. }
  18. return leafNodes
  19. }
  20. // 获取所有二级节点
  21. export const getSecondNodes = (tree) => {
  22. let nodes = []
  23. for (const rootNode of tree) {
  24. if (rootNode.children?.length) nodes = [...nodes, ...rootNode.children]
  25. }
  26. return nodes
  27. }
  28. // 找到数组中第一对重复的元素并返回元素及元素在原数组的下标
  29. export const findFirstDuplicateWithIndices = (arr) => {
  30. const elementIndices = new Map();
  31. for (let i = 0; i < arr.length; i++) {
  32. const element = arr[i];
  33. if (elementIndices.has(element)) {
  34. // 如果元素已经在 elementIndices 中,返回元素和它的两个下标
  35. return {
  36. element: element,
  37. firstIndex: elementIndices.get(element),
  38. secondIndex: i
  39. };
  40. } else {
  41. // 如果元素不在 elementIndices 中,存储它的下标
  42. elementIndices.set(element, i);
  43. }
  44. }
  45. // 如果没有找到重复元素,返回 null 或其他表示未找到的值
  46. return null;
  47. }