12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // 获取所有的叶子节点
- export const getLeafNodes = (tree) => {
- const leafNodes = []
- function traverse(node) {
- if (!node.children || node.children.length === 0) {
- leafNodes.push(node)
- } else {
- for (let child of node.children) {
- traverse(child)
- }
- }
- }
- // 开始遍历
- if (!tree?.length) return []
- for (let rootNode of tree) {
- traverse(rootNode)
- }
- return leafNodes
- }
- // 获取所有二级节点
- export const getSecondNodes = (tree) => {
- let nodes = []
- for (const rootNode of tree) {
- if (rootNode.children?.length) nodes = [...nodes, ...rootNode.children]
- }
- return nodes
- }
- // 找到数组中第一对重复的元素并返回元素及元素在原数组的下标
- export const findFirstDuplicateWithIndices = (arr) => {
- const elementIndices = new Map();
- for (let i = 0; i < arr.length; i++) {
- const element = arr[i];
- if (elementIndices.has(element)) {
- // 如果元素已经在 elementIndices 中,返回元素和它的两个下标
- return {
- element: element,
- firstIndex: elementIndices.get(element),
- secondIndex: i
- };
- } else {
- // 如果元素不在 elementIndices 中,存储它的下标
- elementIndices.set(element, i);
- }
- }
- // 如果没有找到重复元素,返回 null 或其他表示未找到的值
- return null;
- }
|