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替换代码,这会给我一个语法错误