Как установить символ JavaScript в качестве ключа объекта? - PullRequest
1 голос
/ 29 сентября 2019

У меня есть уникальный случай, когда мне нужно использовать символ Javacript в качестве ключа объекта. Это необходимо, потому что для того, чтобы соответствовать документации Sequelize, есть случаи, когда нам нужно что-то похожее на это:

const where = {
    cost: {
        [Op.gt]: 1000,
        [Op.lt]: 2000
    }
}

И [Op.gt], и [Op.lt] являются символами Javascript, которые помогают при запросах,Блок кода запросит, где свойство с именем cost больше 1000, но меньше 2000. Но когда я пытаюсь программно установить пары ключ / значение, например:

where['cost'][[Op.gt]] = 1000;

, я получаю следующую ошибку:

Невозможно преобразовать значение символа встрока

Это динамический объект, поэтому я не могу жестко закодировать символы в запросе where, поскольку следующему пользователю может не потребоваться выполнять запрос по этим параметрам. Как мне это сделать? Спасибо!

1 Ответ

1 голос
/ 29 сентября 2019

Снимите 1 скобку вокруг вашего символа, и все будет в порядке:

where['cost'][Op.gt] = 1000;

obj[Op.gt] означает, что вы получаете доступ к свойству объекта с именем Op.gt. obj[[Op.gt]] означает, что вы обращаетесь к свойству объекта с именем, равным массиву [Op.gt] stringified. Что похоже на ниже:

const arr = [Op.gt];
const propertyName = arr.toString(); // => throw error "Cannot convert a Symbol value to a string"
where['cost'][propertyName];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...