补充一些常用方法,这类方法通常不被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"}
//];