2016-12-24 15 views
2
[ 
    { 
    "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 
    } 
] 

例を上に示します。JSONオブジェクトexpressJS/UnderscoreJS

私は、特定のクエリを満たすオブジェクトだけを取得したいと思っています。

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); 


}); 

これはどのように機能しますか?アンダースコアの内部で述語として関数を入力するにはどうすればよいですか?

答えて

0

Array#filterは、正しいコールバックを使用してプレーンなJavascriptで使用できます。その引数ではなく、関数として値オブジェクト:

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)));

0

whereが鍵を取る強調しています。あなたが望むプロパティが分かっていれば便利です。

例:

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

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

where戻る指定されたプロパティを含むすべての要素は、findWhere最初に一致した要素を返します。

フィルタ条件がより複雑で、述語を指定する必要がある場合は、アンダースコアまたはネイティブJSのいずれかを使用してfilterを使用する必要があります。