按说明过滤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)));