按说明过滤JSON对象expressJS / UnderscoreJS

[ { "id": 1, "description": "Take out the trash", "completed": false }, { "id": 2, "description": "Get food tonight", "completed": false }, { "id": 3, "description": "Hit the gym", "completed": true } ] 

示例arrays在上面。

我想说只得到满足某个查询的对象。

 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var _ = require('underscore'); app.get('/todos/query/:des', function (req, res){ var descriptionToFilter = req.params.des; console.log(descriptionToFilter); var filteredDesArr = _.where(todos,function(todo){ todo.description.contains(descriptionToFilter.toLowerCase()); }); res.send(filteredDesArr); }); 

这个怎么用? 我怎样才能input一个函数作为下划线内的谓词呢?

下划线where取一个key:value对象作为它的参数,而不是一个函数。 如果你知道你想要的属性,这很方便。

例子:

var completed = _.where(todos,{completed:true});

var gymCompleted = _.where(todos,{completed:true,description:"Hit the gym"})

where返回包含指定属性的所有元素, findWhere返回第一个匹配元素。

如果你的过滤标准更复杂,你需要指定一个谓词,那么你必须使用filter ,通过下划线或原生的JS

你可以使用一个正确的callback在纯JavaScript中的Array#filter

 function byCompleted(item) { return item.completed; } function byId(id) { return function (item) { return item.id === id; }; } var data = [{ id: 1, description: "Take out the trash", completed: false }, { id: 2, description: "Get food tonight", completed: false }, { id: 3, description: "Hit the gym", completed: true }]; console.log(data.filter(byCompleted)); console.log(data.filter(byId(2)));