首页 > 解决方案 > 方法 push 不会向先前具有相同值的向量添加值

问题描述

我将要介绍的代码的目标是创建一个辅助向量,其中将包含 petri 网转换、弧线和位置。我将一个 petri 网分成几组,每组是一个带有各自输入弧和位置的转换。

问题如下:将信息放在辅助向量的第一个位置后,我无法放置与前一组位置具有相同 ID 的位置。例如,如果我有一个 place_id=1 和 place_id=2 的转换,而下一个转换有 place_id=2 和 place_id=3,则代码不会将值 place_i=2 写入第二组的向量中。

function conflict() {
    var id = [];
    var source = [];
    var target = [];
    var aux = [];
    var cont = [];
    var places = pnml.getElementsByTagName("place");
    var arcs = pnml.getElementsByTagName("arc");
    var transitions = pnml.getElementsByTagName("transition");

    for (var i = 0; i < transitions.length; i++) {
        target.push(transitions[i].getAttribute("id"));
        aux.push([]);
        for (var j = 0; j < arcs.length; j++) {
            if (arcs[j].getAttribute("target") == transitions[i].getAttribute("id")) {
                id.push(arcs[j].getAttribute("id"));
                source.push(arcs[j].getAttribute("source"));
                //console.log(arcs[j].getAttribute( "source" ));
            }
        }
        //console.log(id); 
        //console.log(arcs);
        //console.log(places);
        aux[i].push(id, source, target);
        //id.length=0;
        target = [];
        source = [];
        id = [];
    }
}

控制台打开的平台图像 提前致谢

标签: javascript

解决方案


在不知道很多问题的情况下,尝试改变它

aux.push([]);

对此

aux[i]=[];

这样您就可以使用索引而不是推送和索引来初始化和填充,以保持一致性。让我知道它是否有帮助

编辑:还有这个

aux[i].push(id, source, target);

对此(也许?)

aux[i].push({ id: id, source:source, target:target});

您可能希望将对象保留在辅助中,因此您需要推送一个对象,而不是像这样的 3 个参数


推荐阅读