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'}}}但问题是它周围有单引号,我的查询再次失败。