Осуществление смены для набора в JavaScript, который эмулирует для массивов


Я обнаружил, что JavaScript наборы заказали, но не предлагают способ, чтобы взять первый элемент из набора. Для массивов эта операция существует и это называется сдвиг.

Очень простой реализации может быть записан таким образом:

function shiftSet(s) {
    let res;
    for (let v of s) {
        res= v;
        break;
    }
    s.delete(res);
    return res;
}

Вы видите лучший способ, чтобы написать это?



97
2
задан 17 февраля 2018 в 05:02 Источник Поделиться
Комментарии
2 ответа

Первый элемент набора можно получить по телефону next() метод итератор из Set объект. Поскольку вы используете for...of заявление, такое итератор уже используется под капотом (то же самое верно для forEach и распространения оператора).

Кроме того, нет никаких причин, чтобы сократить имена переменных, как и ты. Как правило, это делает код менее читаемым. Назвать это setне s.

Ваша функция может быть переписана так:

function shiftSet(set) {
const firstValue = set.values().next().value;
set.delete(firstValue);
return firstValue;
}

3
ответ дан 17 февраля 2018 в 08:02 Источник Поделиться

Другой способ сделать это с помощью функции итератора.

function shifySet(set) {
const first = set[Symbol.iterator]().next().value;
set.delete(first);
return first;
}

Я собирался проверить, если там был пункт, но кажется, бессмысленно. Работает так же, как ваша функция смены первой записи, возвращая его, или undefined, если не нашли.

Я хотел внести небольшое изменение в вашей версии

function shiftSet(set) {
for (const res of set) {
set.delete(res);
return res
}
}

3
ответ дан 17 февраля 2018 в 08:02 Источник Поделиться