Поиск отдельных экземпляров класса из значений в JS - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь распечатать набор координат из класса. Каждый экземпляр этого класса имеет 3 значения: долгота, широта и IP-адрес. Я читаю файл журнала, в котором регистрируются исходные и целевые IP-адреса различных кибератак. Когда я читаю IP-адрес из файла журнала, есть ли способ для JS распознать, что IP-адрес принадлежит экземпляру класса, а затем распечатать будущие значения класса на основе того, какой класс он распознает? Как лучше всего это сделать? Можно ли это решить с помощью JQuery?

class comp {
    constructor(ipa, long, lat){
        this.address = ipa;
        this.long = long;
        this.lat = lat;
        ips.push(address);
    }
    getlong(){
        return this.long;
    };
    getlat(){
        return this.lat;
    }
    getip(){
        return this.address;
    }
    setlatlong(inputLong, inputLat){
        this.long = inputLong;
        this.lat = inputLat;
        return;
    }
    setip(inputIP){
        this.address = inputIP;
    }
};

comp1 = new comp('10.0.0.1', '-77.050636', '38.889248');
comp2 = new comp('10.0.0.2', '-78.050636', '39.889248');
//obj = ip addresses
function process(obj){
    ///
    if (ids.includes(obj.id)) {
            ids.push(obj.id);
            hits.push( { origin : { latitude: comp1.getlat(), longitude: comp1.getlong() },
            destination : { latitude: comp2.getlat(), longitude: comp2.getlong() } } );
        }
};

1 Ответ

1 голос
/ 07 мая 2020

Я не уверен, что понимаю, что вы имеете в виду, но вы можете использовать stati c properties . Однако это чистое решение JS.

Также вы, вероятно, знаете об этом, но в соответствии с нормой OOP я советую вам использовать Pascal case для name классы, поэтому я взял на себя смелость переименовать его соответствующим образом.

Pure JS Solution

class Comp {

    // declare static array
    static instances = [];

    constructor(ipa, long, lat) {
        this.address = ipa;
        this.long = long;
        this.lat = lat;

        // to access static properties, use Class.property syntax
        // populates the class's instances array with every new instance
        Comp.instances.push(this);

        ips.push(this.address);
    }

    // static method to retrieve instance based on IP
    static getInstance(ip) {
        return Comp.instances.find(v => v.address == ip, null);
    }

    getlong(){
        return this.long;
    };
    getlat(){
        return this.lat;
    }
    getip(){
        return this.address;
    }
    setlatlong(inputLong, inputLat){
        this.long = inputLong;
        this.lat = inputLat;
        return;
    }
    setip(inputIP){
        this.address = inputIP;
    }
};

comp1 = new Comp('10.0.0.1', '-77.050636', '38.889248');
comp2 = new Comp('10.0.0.2', '-78.050636', '39.889248');

console.log(Comp.getInstance('10.0.0.1')); // prints comp1

Теперь вот бит, который я не мог понять. Нет смысла проверять массив на предмет IP, а затем снова нажимать его, если он истинен.

Итак, я решил, что вы просто хотите, чтобы каждый IP был создан один раз, поэтому ...

// source and target objects
function process(src, tgt){
    // gets instance of src, if it exists; else creates new one
    let comp1 = Comp.getInstance(src.ipa) || new Comp(src.ipa, src.long, src.lat);
    // gets instance of tgt, if it exists; else creates new one
    let comp2 = Comp.getInstance(tgt.ipa) || new Comp(tgt.ipa, tgt.long, src.lat);
    hits.push({
            origin: { latitude: comp1.getlat(), longitude: comp1.getlong() },
            destination : { latitude: comp2.getlat(), longitude: comp2.getlong() }
        });
};

Вы можете выполнить команду console.log(Comp.instances) на консоли, чтобы проверить сохраненные адреса и координаты. Другая возможная идея, если она имеет смысл, - это выброс исключения, если кто-то пытается создать экземпляр дублированного IP-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...