Не работает метод (из npm library)

добрый день.
this.map.remove не работает

         for(i in dat){
        if(i == this.type){
            var data = dat[this.type];
            var l = data.length;
            for(var i = 0;i < l ; i++ ){
                var price = (data[i])[0].toString();
                var amount = parseFloat((data[i])[1]);
                this.map.remove(price);
                if(amount!= 0){
                    this.map.insert(
                        (this.type == "ask" ? (function(l, r){return l < r;}) : (function(l, r){return l > r;})) 
                        ,{k: price, v: amount }
                    );
                }
            }
        }
    }

использую библиотеку sorted-object-array.(с изменениями добавил comporator)
вот ссылка:
https://www.npmjs.com/package/sorted-object-array
спасибо

Вопрос слишком пространный чтобы смочь ответить.

Напиши (давай сразу на “ты”) в формате:

  • что делаешь
  • что ожидаешь увидеть
  • что видишь

В идеале приложи код, который можно запустить и увидеть проблему.

здравствуйте
нужно два отсортированных(один по убыванию другой по возрастанию) массива с объектами в которых {k:“string”, v:результат вызова функции parseFloat(“string”)}.
они должны синхронизироваться с помощью уведомлений.
вижу я что в втором массиве не удаляться ключи.
далее надо суммировать все значения результатa вызова функции parseFloat(“string”).
спасибо

s

Это не помогло. Я имел в виду что-то вроде “мне нужно добавить элемент в map, я вызываю метод map.insert(/*тут реальный код*/), убедился что код вызывается. Вызываю console.log(map) и не вижу элемента в map”.

Какие именно изменения? В апи библиотеки нет вызова метода insert с первым аргументом функцией. Убедись что “чистый” вызов insert без твоей логики работает с двумя аргументами как этого ожидаешь ты.

И убедись что вообще блок кода в условии if(amount!= 0){ выполняется. Например залогируй значения передаваемых аргументов в this.map.insert.

var SortedObjectArray = require("sorted-object-array");
class Test{
    constructor(){
     this.map = new SortedObjectArray("k");
    }
}
Test.prototype.test = function(test, min , max){
    for(i=0;i<=test;i++){
        var a = Math.random() * (max - min) + min;
        var b = parseFloat(Math.random() * (max - min) + min );
        a = a.toFixed(3);
        b = parseFloat(b.toFixed(3));
        this.map.remove(a);
        if(b != 0) {
            var search = this.map.search(a);
            if(search != -1) throw a;
            this.map.insert(function(l, r){return l > r;},{k:a,v:b});
        }
        
    }
    return(this.map.array);
}
var tester = new Test;
console.log(tester.test(300,0,10));

вот эти изменения :

 SortedObjectArray.prototype.insert = function (comparator, element) {
    var array = this.array;
    var index = array.length;
    array.push(element);

    while (index) {
        var i = index, j = --index;

        if (comparator(this.getKey(i), this.getKey(j))) {
            var temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }

    return this;
};

Твои изменения валидны.

По коду из тела поста не понятно с каким ключем создан SortedObjectArray. Компаратор работает со значениями этого ключа. Удаляет тоже по значению в этом ключе. Т.е чтобы удаление работало, нужно чтобы значение и тип price в this.map.remove(price) было таким как в ключе, переданным в конструктор SortedObjectArray.

Если предположить что ключ был 'k', тогда компаратор не очень ибо сравнивает строки. Если предположить что ключ 'v', тогда копаратор имеет значение, но удаление не будет работать так как price в this.map.remove(price) - строка.