简体   繁体   English

JavaScript管理周期

[英]JavaScript manages cycles

我创建了一个脚本,该脚本接收字符串数组并过滤重复的免费单个字符串。

const a = [
    "Leetmeme: Cyberportal",
    "Cyberportal: Ice,Fraudstream",
    "CamelCaser: KittenService",
    "Fraudstream: Leetmeme",
    "KittenService:",
    "Ice:"
];

//transforming `a` into a reasonable structure
let identity = v => v;
let dependencies = a.reduce((acc, str) => {
    let [key, ...deps] = str.split(/[:,]\s*/g).filter(identity);
    acc[key] = deps;
    return acc
}, {});

let depth = 0; //just for logging
let status = {};
let load = (acc, module) => {
    if(status[module] === "loading"){
        var circle = Object.keys(status).filter(k => status[k] === "loading").concat(module);
        throw new Error("circular reference found: " + circle);
    }

    if(status[module] !== "done"){
        console.log("  ".repeat(depth++), module);
        status[module] = "loading";
        let deps = dependencies[module] || [];
        deps.reduce(load, acc).push(module);
        status[module] = "done";
        --depth;
    }
    return acc;
}

let order = Object.keys(dependencies).reduce(load, []);
console.log(order);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM