Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
module.exports = class {
constructor() {
this._data = new Map;
this._i32 = new Int32Array(2);
}
get([hi, lo]) {
this._i32[0] = lo;
this._i32[1] = hi;
return this._data.get((new Float64Array(this._i32.buffer))[0]);
}
set([hi, lo], obj) {
this._i32[0] = lo;
this._i32[1] = hi;
return this._data.set((new Float64Array(this._i32.buffer))[0]);
}
*entries() {
for (const [key, obj] of this._data.entries()) {
let [lo, hi] = new Int32Array(key.buffer);
yield [[+hi, +lo], obj];
}
}
};
Что-то в этом коде неправильно, но не могу понять что. Даже после исправлений в виде добавления , obj в метод set и создания массива в entries (key — число, у него нет буфера) он все еще выдает неправильный результат.
Кстати, у этого кода есть еще проблема с NaN и -0, но в тестах они не встречаются.
A BigInt не поможет?
https://developers.google.com/web/updates/2018/05/bigint
64-битный hashmap в JS