在 node/expressjs 中筛选 json 个对象

Filtering a json object in node/expressjs

我正在寻找过滤器 json 文件,具体取决于用户在 express js 应用程序中使用下划线从上一页输入的内容。这是我到目前为止所做的:

var fs = require('fs');
var contents = fs.readFileSync("public/files/testFile.json");
var obj = JSON.parse(contents);
var gender = req.query.gender

var filtered = _.where(obj.elements, {gender: true}); // elements is the array I want to filter

我要过滤的 json 如下:

{
   "elements": [
   {
       "id": 0,
       "man": true,
       "url": "https://pbs.twimg.com/media/CfRi_u8aaW8AfQvI7v.jpg"
   },
   {
       "id": 1,
       "Woman": true,
       "url": "https://pbs.twimg.com/media/CfZ-8ikafWsAAngQGP.jpg"
   }
 ]
}

请注意,当我通过 "man" 更改变量性别时,它的工作原理 properly.Looks 就像使用变量进行搜索一样不起作用。我有 2 个问题:

  1. 我该怎么做才能让它发挥作用?
  2. 有没有更好的方法来面对这个问题?

您可以构建一个新的 Json 对象。

var obj = {};
obj[req.query.gender] = true;
var filtered = _.where(obj.elements, obj);

尽管我可能建议使用值为 Male/Female 的性别字段,而不是 Male:true 或 Female:true。

你为什么不试试下面的方法:

var _ = require('underscore');
var elem = {
    "elements": [
        {
            "id" : 0,
            "man": true,
            "url": "https://pbs.twimg.com/media/CfRi_u8W8AQvI7v.jpg"
        },
        {
            "id"   : 1,
            "woman": true,
            "url"  : "https://pbs.twimg.com/media/CfZ-8ikWsAAnQGP.jpg"
        }
    ]
};
var gender = 'man';
var filtered = _.filter(elem.elements, function(element){
    return _.has(element, gender) && element[gender] === true;
});
console.log(filtered);

我在这里硬编码了性别的价值。您可以从应用程序中的查询中读取它。我认为该片段几乎是不言自明的。