var _ = require("underscore");var json = '[{"user": "a", "age": 20}, {"user": "b", "age": 30}, {"user": "c", "age": 40}]';var users = JSON.parse(json);var filtered = _.where(users, {user: "a"});// => [{user: "a", age: 20}]
另一个实用程序库Lo-
Dash具有 *** 作相同的where函数。
您可以使用下划线添加到项目中
$ npm install --save underscore
或lodash
$ npm install --save lodash
如果您 只 关心该
where功能,lodash会将其作为单独的模块提供
// only install lodash.where$ npm install --save lodash.where
在项目中使用它
var where = require("lodash.where");// ...var filtered = where(users, {"user": "a"});
即使您使用库来执行此 *** 作,一种更好的方法也可能是设置一串流,以在较小的模块中处理所有数据处理。
在不知道您实际想要做什么的情况下,我创建了此示例。就此代码而言,可能想到调试日志流或其他东西。
json-parser.js
输入:字符串(JSON)
输出:对象
var Transform = require("stream").Transform;function JsonParser() { Transform.call(this, {objectMode: true}); this._transform = function _transform(json, enc, done) { try { this.push(JSON.parse(json)); } catch (e) { return done(e); } done(); }}JsonParser.prototype = Object.create(Transform.prototype, { constructor: { value: JsonParser }});module.exports = JsonParser;
obj-filter.js
输入:对象
输出:对象(的结果
where(data, filters))
var Transform = require("stream").Transform;var where = require("lodash.where");function ObjFilter(filters) { Transform.call(this, {objectMode: true}); this._transform = function _transform(obj, enc, done) { this.push(where(obj, filters)); done(); }}ObjFilter.prototype = Object.create(Transform.prototype, { constructor: { value: ObjFilter }});module.exports = ObjFilter;
stringifier.js
输入:对象
输出:字符串(JSON)
var Transform = require("stream").Transform;function Stringifier() { Transform.call(this, {objectMode: true}); this._transform = function _transform(obj, enc, done) { this.push(JSON.stringify(obj)); done(); }}Stringifier.prototype = Object.create(Transform.prototype, { constructor: { value: Stringifier }});module.exports = Stringifier;
app.js
// modulesvar JsonParser = require("json-parser");var ObjFilter = require("obj-filter");var Stringifier = require("stringifier");// runvar parser = new JsonParser();// setup stream chainparser.pipe(new ObjFilter({"user": "a"})) .pipe(new Stringifier()) .pipe(process.stdout);// send example json inparser.write('[{"user": "a", "age": 20}, {"user": "b", "age": 30}, {"user": "c", "age": 40}]');// output// => [{"user":"a","age":20}]
在这里,我创建了一个
Stringifier流,该流将对象转换回JSON,以便我们可以看到它们已转储到控制台中,尽管您可以轻松创建处理应用程序所需 *** 作所需的任何流。您的流端点可能不会以书面形式写入控制台。
最后一点,您可能会创建一个接受某种查询选项并发出json的数据库流。您可以将流直接传送到
parser。
无论如何,我希望这可以使您更好地了解如何在node.js中处理数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)