Javascript 为什么这个JSX只返回我最后添加到对象中的内容?
我有一个用于构建搜索过滤器的函数,在这个函数中我有Javascript 为什么这个JSX只返回我最后添加到对象中的内容?,javascript,json,Javascript,Json,我有一个用于构建搜索过滤器的函数,在这个函数中我有 const filter = { $and: [ req.query.category !== "" ? { category: req.query.category } : {}, req.query.subCategory !== "" ? { tags: req.query.subCategory } : {}, req.query
const filter = {
$and: [
req.query.category !== "" ? { category: req.query.category } : {},
req.query.subCategory !== "" ? { tags: req.query.subCategory } : {},
req.query.contentType !== ""
? {
contentType: req.query.contentType,
}
: {},
req.query.searchTerm !== ""
? ({
name: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
},
{
tags: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
},
{
description: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
})
: {},
],
};
但是当我打印console.log(filter)
时,我得到的只是{'$and':[{},{},{},{description:[Object]}}
。但假设我删除了描述,甚至在描述后加上标签,就像这样
{
description: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
},
{
tags: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
}
,那么我得到的就是这个{'$and':[{},{},{},{tags:[Object]}]}
为什么每次对象数组都是空的,而不是最后一个?请尝试拆分对象,以获得
req.query.searchTerm
,如下所示:
const filter = {
$and: [
req.query.category !== "" ? { category: req.query.category } : {},
req.query.subCategory !== "" ? { tags: req.query.subCategory } : {},
req.query.contentType !== ""
? {
contentType: req.query.contentType,
}
: {},
req.query.searchTerm !== ""
? {
name: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
} : {},
req.query.searchTerm !== ""
? {
tags: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
} : {},
req.query.searchTerm !== ""
? {
description: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
} : {},
],
};
但是,这将在
$和列表中为您提供6个对象尝试为req.query.searchTerm
拆分对象,如下所示:
const filter = {
$and: [
req.query.category !== "" ? { category: req.query.category } : {},
req.query.subCategory !== "" ? { tags: req.query.subCategory } : {},
req.query.contentType !== ""
? {
contentType: req.query.contentType,
}
: {},
req.query.searchTerm !== ""
? {
name: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
} : {},
req.query.searchTerm !== ""
? {
tags: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
} : {},
req.query.searchTerm !== ""
? {
description: {
$regex: "(?i)" + req.query.searchTerm + "(?-i)",
$options: "i",
},
} : {},
],
};
但是,这将在$和列表中为您提供6个对象,您需要确定返回对象的外观
您的代码当前看起来如下所示:
if (searchTerm !== '') {
return( { a: 'a' } , { b: 'b' } , { c: 'c' } ); // returns { c: 'c' }
}
if (searchTerm !== '') {
return( { a: 'a' , b: 'b' , c: 'c' } ); // returns 1 object with all 3 properties
^ ^
}
听起来您可能想返回更像这样的内容:
if (searchTerm !== '') {
return( { a: 'a' } , { b: 'b' } , { c: 'c' } ); // returns { c: 'c' }
}
if (searchTerm !== '') {
return( { a: 'a' , b: 'b' , c: 'c' } ); // returns 1 object with all 3 properties
^ ^
}
req.query.searchTerm!==""
? ({//添加了一个{
//{//删除其他各种大括号({})
姓名:{
$regex:“(?i)”+req.query.searchTerm+“(?-i)”,
$options:“我”,
},
//},
//{
标签:{
$regex:“(?i)”+req.query.searchTerm+“(?-i)”,
$options:“我”,
},
//},
//{
说明:{
$regex:“(?i)”+req.query.searchTerm+“(?-i)”,
$options:“我”,
},
//}
})//添加了一个}
: {},
您需要弄清楚返回对象应该是什么样子
您的代码当前看起来如下所示:
if (searchTerm !== '') {
return( { a: 'a' } , { b: 'b' } , { c: 'c' } ); // returns { c: 'c' }
}
if (searchTerm !== '') {
return( { a: 'a' , b: 'b' , c: 'c' } ); // returns 1 object with all 3 properties
^ ^
}
听起来您可能想返回更像这样的内容:
if (searchTerm !== '') {
return( { a: 'a' } , { b: 'b' } , { c: 'c' } ); // returns { c: 'c' }
}
if (searchTerm !== '') {
return( { a: 'a' , b: 'b' , c: 'c' } ); // returns 1 object with all 3 properties
^ ^
}
req.query.searchTerm!==""
? ({//添加了一个{
//{//删除其他各种大括号({})
姓名:{
$regex:“(?i)”+req.query.searchTerm+“(?-i)”,
$options:“我”,
},
//},
//{
标签:{
$regex:“(?i)”+req.query.searchTerm+“(?-i)”,
$options:“我”,
},
//},
//{
说明:{
$regex:“(?i)”+req.query.searchTerm+“(?-i)”,
$options:“我”,
},
//}
})//添加了一个}
: {},
什么是req.query
?这是我的搜索词,因此如果我打印该词的值,则该值是正确的。因此,出于测试目的,它可以是任何字符串。是的,但是您得到{}
的原因是:req.query.subCategory==”
所以它是一个空字符串。如果它不是空字符串,它将返回:{tags:req.query.subCategory}
它看起来像req.query.searchTerm
不是”
,也不是名称、标记周围的括号,描述对象可能是方括号或一个对象。我在这个问题中没有看到任何JSX?什么是req.query
?它是我的搜索词,所以如果我打印它的值,值是正确的。因此,出于测试目的,它可以是任何字符串。是的,但是您得到{}
的原因是:req.query.subCategory==”
所以它是一个空字符串。如果它不是空字符串,它将返回:{tags:req.query.subCategory}
它看起来像req.query.searchTerm
不是”
,也不是名称、标记周围的括号,描述对象应该是方括号或一个对象。我在这个问题中没有看到任何JSX?这给了我想要的对象,但由于某种原因API没有正确搜索。我正在使用MongoDB atlas并使用此对象在DB中搜索。Chris在这里的回答是:更接近原始格式,我只建议删除括号。编辑:我现在真的明白你想做什么了,让我更改我的答案。当我使用Chris的答案时,我得到了一个属性分配预期的错误。我正在使用Mongoose Pagination,idk(如果有帮助的话),但我的最终目标是在Mongoose Pagination()方法中将此对象用作过滤器。像这样的'wait Content.paginate(过滤器,选项,(错误,结果)…看看我最新的答案,看看这种格式是否对你有帮助我对Mongo不太熟悉,我建议你提出一个新问题,专门针对mongodb和mongoose分页,不管是什么。另外,看看文档,你可能想去掉三元运算符,看看list.append()对于JavaScriptThat,它为我提供了所需的对象,但由于某些原因API没有正确搜索。我正在使用MongoDB atlas并使用此对象在DB中搜索。Chris在这里的回答是:更接近您的原始格式,我只建议删除括号。编辑:我确实看到您现在正在尝试做什么,让我更改我的answer。当我使用Chris的答案时,我得到了一个预期的属性分配
错误。我使用Mongoose分页,idk,如果这有帮助的话,但这是我的最终目标,就是在Mongoose Pagination()方法中将此对象用作过滤器。类似这样的“等待内容.分页(过滤器,选项,(错误,结果))…看看我最新的答案,看看这种格式是否对你有帮助我对Mongo不太熟悉,我建议你提出一个新问题,专门针对mongodb和mongoose分页,不管是什么。另外,看看文档,你可能想去掉三元运算符,看看list.append()对于Javascript,如果我用this替换代码,这会给我一个语法错误如果我用this替换代码,这会给我一个语法错误