Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set a Javascript Symbol as an Object Key?

I have a unique case where I need to use a Javacript symbol as an object's key. This is necessary because in order to conform to Sequelize's documentation, there are instances where we need to have something that looks like this:

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

Both [Op.gt] and [Op.lt] are Javascript symbols that assist with querying. The block of code will query where a property called cost is greater than 1000 but less than 2000. But when I try to programmatically set the key/value pairs like:

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

I receive the following error:

Cannot convert a Symbol value to a string

This is a dynamic object, so I cannot hard code the symbols into the where query since the next user may not need to query by these parameters. How do I go about this? Thanks!

like image 919
Jordan Lewallen Avatar asked Jan 28 '26 16:01

Jordan Lewallen


1 Answers

Remove 1 bracket around your symbol and you will be fine:

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

obj[Op.gt] means you're accessing an object property with the Op.gt name. obj[[Op.gt]] means you're accessing an object property with the name equal to an array [Op.gt] stringified. Which is similar to below:

const arr = [Op.gt];
const propertyName = arr.toString(); // => throw error "Cannot convert a Symbol value to a string"
where['cost'][propertyName];
like image 162
Dat Le Avatar answered Jan 30 '26 08:01

Dat Le



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!