编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
console.log("Hello world!            -  js.jsrun.net ");

function sortByFrequency(arr) {
    const ans = {}; // 键值提交次数
    arr.forEach(num => {
        if(ans[num]) {
            ans[num]++;
        }else {
            ans[num] = 1;
        }
    })

    const sortElement = Object.entries(ans).sort((a,b) => {
        if(a[1] === b[1]) {
            return a[0]-b[0]; // 元素大小
        }
        return b[1]-a[1]; // 次数
    })

    const res = sortElement.map(item => parseInt(item[0]));

    return res;
}
const arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4];
console.log(sortByFrequency(arr));  // 输出:[4, 3, 2, 1]


class TreeNodes {
    constructor(id) {
        this.id = id;
        this.children = [];
    }
}
// 构建树再后续变量
function buildTree(nodes) {
    const nodeDict = {};
    let root = null;

    // 存储到字典
    nodes.forEach(nodeInfo => {
        const node = new TreeNodes(nodeInfo.id);
        nodeDict[node.id] = node;
    })
    // 构建树形

    nodes.forEach(nodeInfo => {
        const node = nodeDict[nodeInfo.id];
        if(nodeInfo.parentid === null) {
            root = node;
        } else {
            const parentNode = nodeDict[nodeInfo.parentid];
            parentNode.children.push(node);
        }
    })

    return root;
}

function postorder(node,res) {
    if(!node) return ;
    node.children.forEach(child => postorder(child,res));

    res.push(node.id);
}
// 测试
const nodes = [
    { id: 1, parentid: null },
    { id: 2, parentid: 1 },
    { id: 3, parentid: 1 },
    { id: 4, parentid: 2 },
    { id: 5, parentid: 2 }
];

const root = buildTree(nodes);
const result = [];
postorder(root, result);
console.log(result);  // 输出:[4, 5, 2, 3, 1]


function inst(left,right) {
    let proto = left.__proto__;
    // = Object.getPrototypeOf(left);
    let prototype = right.prototype;

    while(true) {
        if(!proto) return false;
        if(proto == prototype) return true;
        proto = Object.getPrototypeOf(proto);
    }
}

function deep(target,map = new WeakMap()) {
    // 处理 null 或基本类型
    if (target === null || typeof target !== 'object') {
        return target;
    }

    const obj = Array.isArray(target) ? []:{};
    
    map.set(target,obj);
    for(let key in target) {
        if(target.hasOwnProperty(key)) {
            obj[key] = deep(target[key],map);
        }
    }
    return obj;
}