plusplus

I need a better Underscore in Node.js.

PlusPlus

项目目的

补充一些常用方法,这类方法通常不被ECMAScript5直接提供,也不被Underscore提供,却是我们经常需要写的代码,作者饱受代码量之苦,决定写作这样一个模块,这包括对数组的操作,对对象的操作等。

文档

本模块采用的API接口保持与Underscore一致。由于本模块仅为Node专门写就,淘汰部分原生就支持的API,不再继续提供,其中部分由于在Node环境中存在问题,也给予淘汰,并给出正确的方案。
斜体的方法,则是来自于PlusPlus的原创。

返回PlusPlus的版本号

如果obj是数组,直接调用forEach。如果是对象,通过for in的方式调用,并判断hasOwnProperty,防止到原型链上查找。
迭代器接受三个参数[value, index, object]

PlusPlus不重复提供此API

PlusPlus不重复提供此API

PlusPlus不重复提供此API

PlusPlus不重复提供此API

PlusPlus不重复提供此API

PlusPlus不重复提供此API

分组数据。key可以传入一个迭代器,也可以传入一个索引值。

不推荐在Node中无限制使用。

Node对参数支持良好,无需实现delay方法。

返回由对象的所有值(不包括原型链上)组成的数组。

PlusPlus不重复提供此API

返回对象是否function。

后端环境无需提供此函数

不推荐使用。

不推荐使用,Node中有更强大的模板引擎,Underscore的该方法也不便于调试。

重命名一个对象的字段。多用于数据矫正。

var obj = {"from": "I am value"};
plus.rename(obj, "from", "to");
// obj = {"to": "I am value"};

返回一个对象指定字段构成的新对象,多用于过滤传入数据。

// req.query = {
//  "username": "Jackson",
//  "password": "I am password",
//  "_": "random string for no cache."
// };
var obj = plus.columns(req.query, ["username", "password"]);
// obj = {
//  "username": "Jackson",
//  "password": "I am password"
// };

搭配Array.prototype.map,可以对一个数组进行数据抽取。

将一个对象集合转化为二维表格。也许你为了节省网络传输的带宽而选择这么做。

var list = [
    {"username": "JacksonTian", "nick": "朴灵", "hometown": "Chongqing"},
    {"username": "Fengmk2", "nick": "苏千", "hometown": "Guangzhou"}
];
plus.tablify(list);
//[
//  ["username", "nick", "hometown"],
//  ["JacksonTian", "朴灵", "Chongqing"],
//  ["Fengmk2", "苏千", "Guangzhou"]
//]

tablify的反向工程。为了代码的调用更舒适,多半你喜欢将二维表还原。

var table = [
  ["username", "nick", "hometown"],
  ["JacksonTian", "朴灵", "Chongqing"],
  ["Fengmk2", "苏千", "Guangzhou"]
];
 
plus.collectionify(list);
//[
//  {"username": "JacksonTian", "nick": "朴灵", "hometown": "Chongqing"},
//  {"username": "Fengmk2", "nick": "苏千", "hometown": "Guangzhou"}
//];