Javascript:转换对象

Javascript:转换对象,javascript,node.js,Javascript,Node.js,我有一些数据如下所示: let wheredata = [ { "field": { "field": "email", "datatype": "STRING", "inputtype": "text", "model": "User" }, "operator": "Op.eq", "value": "myuser@gmail.com" }, { "field": { "field": "createdAt", "datatype": "DATE", "inputtype": "date",

我有一些数据如下所示:

let wheredata = [ { "field": { "field": "email", "datatype": "STRING", "inputtype": "text", "model": "User" }, "operator": "Op.eq", "value": "myuser@gmail.com" }, { "field": { "field": "createdAt", "datatype": "DATE", "inputtype": "date", "model": "User" }, "operator": "Op.gt", "value": "2015-12-12" } ]
实际上,我正在使用这些数据构建一个动态sequelize查询where子句,它应该如下所示:

{
      email: {[Op.eq]: 'myuser@gmail.com'},
      createdAt: {[Op.gt]: '2015-12-12'}
    }
以下是我执行此操作的代码:

let key, key1, obj, val;
wheredata.forEach(filter => {
  key = filter.field.field;

  key1 = filter.operator;
  if (filter.field.field.datatype === 'INTEGER') {
    val = parseInt(filter.value);
  } else {
    val = filter.value;
  }
  obj = {
    [key1]: val
  };

  whereuser[key] = obj;
});
console.log(whereuser);
但我的答案如下:

{ 
  email: { 'Op.eq': 'myuser@gmail.com' },
  createdAt: { 'Op.gt': '2015-12-12' } 
}
请注意操作员。它们实际上应该类似于[Op.eq]和[Op.gt],但在我的脚本中,它们的名称是'Op.eq'和'Op.gt'

我不明白如何以正确的格式获取这些运算符

为了进一步澄清,正确工作的node/sequelize查询如下,其中用户是sequelize模型。如您所见,我正在尝试动态生成where子句

User.findAll({
      where: {
        email: {[Op.eq]: 'myuser@gmail.com'},
        createdAt: {[Op.gt]: '2015-12-12'}
      }
    })

根据我的理解,你只想把它们放在括号里,这样你就可以做到:

obj = {
  [`[${key1}]`]: val
};

根据我的理解,你只想把它们放在括号里,这样你就可以做到:

obj = {
  [`[${key1}]`]: val
};
Op是一个现有的对象Sequelize.Op,您需要将Op.eq字符串转换为eq,这样您就可以使用括号表示法生成一个计算结果为[Op.eq]的表达式[Op[prop]:

Op是一个现有的对象Sequelize.Op,您需要将Op.eq字符串转换为eq,这样您就可以使用括号表示法生成一个计算结果为[Op.eq]的表达式[Op[prop]:


运算符必须取自Sequelize模块,不能直接解释为字符串

因此,在代码中使用的不是[key1],而是Op[key1.split'.[1]]const Op=Sequelize.Op

如果要使其更干净,请创建一个函数,使用运算符并返回要用作键的值,进入Sequelize对象,如:

const Sequelize={ 作品:{ gt:‘gt’, }; }; 函数运算符{ const split=运算符.split'; 返回split.reducetmp,x=>tmp[x],Sequelize;
} 运算符必须取自Sequelize模块,不能直接解释为字符串

因此,在代码中使用的不是[key1],而是Op[key1.split'.[1]]const Op=Sequelize.Op

如果要使其更干净,请创建一个函数,使用运算符并返回要用作键的值,进入Sequelize对象,如:

const Sequelize={ 作品:{ gt:‘gt’, }; }; 函数运算符{ const split=运算符.split'; 返回split.reducetmp,x=>tmp[x],Sequelize;
}不,在Sequelize中,它实际上是[Op.eq]。你可以在这里看到。obj={[key]:value}只是obj={}的简写语法;obj[键]=值。它将不包含[]。它只意味着你想计算键表达式。不,在Sequelize中,它实际上是[Op.eq]。你可以在这里看到。obj={[key]:value}只是obj={}的简写语法;obj[键]=值。它将不包含[]。这只意味着你想计算键表达式。我尝试了这个,我得到了{email:{'[Op.eq]':'msahajwani@gmail.com“},createdAt:{'[Op.gt]':'2019-12-12'}}}但问题是它周围有单引号,我的查询再次失败。我尝试了这个,我收到了{email:{'[Op.eq]':'msahajwani@gmail.com'},createdAt:{'[Op.gt]“:'2019-12-12'}}}但问题是它周围有单引号,我的查询再次失败。