ошибочка у меня вышла. Недоглядел
Тогда результаты совсем другие по временам
const genKeys = (n) => {
const keys = []
while (n--) {
const nkey = Math.round(Math.random()*1_000_000);
const key = (''+nkey).padStart(7, '0');
keys.push(key)
}
return keys;
}
const N = 1_000_000;
let t0;
// Генерация ключей для заполнения
const keys = genKeys(N);
const obj = {};
const set = new Set();
let key;
// Проверка и добавление для Set
t0 = performance.now();
for (let i=0; i<N; i++) {
key = keys[i];
if (!set.has(key)) set.add(key);
}
const tsetset = performance.now() - t0;
// Проверка и добавление для объекта
t0 = performance.now();
for (let i=0; i<N; i++) {
key = keys[i];
if (!(key in obj)) obj[key] = true;
}
const tsetobj = performance.now() - t0;
// Проверка и удаление для Set
t0 = performance.now();
for (let i=0; i<N; i++) {
key = keys[i];
if (set.has(key)) set.delete (key);
}
const tdelset = performance.now() - t0;
// Проверка и удаление для объекта
t0 = performance.now();
for (let i=0; i<N; i++) {
key = keys[i];
if (key in obj) delete obj[key];
}
const tdelobj = performance.now() - t0;
console.log('Проверка и добавление для объекта', tsetobj.toFixed(0))
console.log('Проверка и добавление для Set', tsetset.toFixed(0))
console.log('Проверка и удаление для объекта', tdelobj.toFixed(0))
console.log('Проверка и удаление для Set', tdelset.toFixed(0))
Цитата:
|
Проверка и добавление для объекта 870
Проверка и добавление для Set 534
Проверка и удаление для объекта 322
Проверка и удаление для Set 489
|
Получается, что добавление для Set быстрее, а удаление быстрее для объектов
Хотя раз 20 запускаешь тест и получаешь разные результаты Иногда, вдруг, удаление для объектов медленнее. Слишком много случайных факторов в работе движка, что бы сделать абсолютно надежный тест.
Единственное, что можно сказать, что это довольно быстро, и наверняка быстрее, чем для массивов.