Underscore.js 和 Lodash 是最常用的JavaScript库。 Underscore.js 它提供了一整套函数式编程的实用功能提供了100多个函数,包括常用的:map、filter、invoke — 当然还有更多专业的辅助函数,如:函数绑定、JavaScript 模板功能、创建快速索引、强类型相等测试等等。 lodash 一开始是 Underscore.js 库的一个 fork,因为和其他(Underscore.js的)贡献者意见相左。John-David Dalton的最初目标,是提供更多“一致的跨浏览器行为……,并改善性能”。之后,该项目在现有成功的基础之上取得了更大的成果。 Underscore.jsUnderscore.js是一个 JavaScript 工具库,提供了类似 Prototype 功能的编程支持,但没有对 JavaScript 内置的对象进行扩展。。Underscore.js定义了一个下划线(_)对象,函数库的所有方法都属于这个对象。这些方法大致上可以分成:集合(collection)、数组(array)、函数(function)、对象(object)和工具(utility)五大类。 Underscore.js使用以一个对象为例: var obj = {name: 'dog', age: '3', color: 'white'}; 获取对象的所有属性名 console.log(_.keys(obj)); // 输出:["name", "age", "color"] 获取对象的所有属性值 console.log(_.values(obj)); // 输出:["dog", 3, "white"] 把一个对象转换成一个 [key, value] 形式的数组 console.log(_.pairs(obj)); // 输出:[["name", "dog"], ["age", 3], ["color", "white"]] 返回一个对象的副本, 并且里面键和值是对调的(要使之有效, 必须确保object里所有的值都是唯一的且可以序列号成字符串.) console.log(_.invert(obj)); // 输出:Object {3: "age", dog: "name", white: "color"} 复制 source 对象的所有属性到 destination 对象上, 然后返回 destination 对象上 console.log(_.extend({weight: 10}, obj)); // 输出:Object {name: "dog", age: 3, color: "white", weight: 10} 返回一个对象的副本, 过滤掉除了 keys 以外的所有属性(一个或多个) console.log(_.pick(obj, 'name', 'color')); // 输出:Object {name: "dog", color: "white"} 返回一个对象的副本, 过滤掉了黑名单里的 keys (keys可以是单个key也可以是包含多个key的数组) console.log(_.omit(obj, 'color')); // 输出:Object {name: "dog", age: 3} LodashLodash是一个具有一致接口、模块化、高性能等特性的 JavaScript 工具库。它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数,其中部分是目前 ECMAScript 尚未制定的规范,但同时被业界所认可的辅助函数。 与Underscore一样,lodash的名字也是源于所有函数前面的那个字符。就像jQuery在全部函数前加全局的$一样,lodash使用全局的_来提供对工具的快速访问。例如,要对数组的所有元素执行某个行为: _.each([1, 2], function(n) { console.log(n); }); Lodash 提供的函数主要分为以下几类:
lodash的一大亮点在于其模块化:开发者可以按需加载,而非引用整个库。每一个模块都暴露在npm中,所以开发者可以独立地引用它们: npm install lodash.map var map = require('lodash.map'); Lodash使用以一个对象数组为例 var employees = [ { 'name': 'zhangsan', 'age': 30, salary: 5000 }, { 'name': 'lisi', 'age': 36, salary: 4000 }, { 'name': 'wangwu', 'age': 32, salary: 6000 } ]; 获取所有员工姓名,并以”,“分割 var names = _.chain(employees) .map(function (employee) { return employee.name; }) .join(",") .value(); console.log(names); // 输出:zhangsan,lisi,wangwu 以上代码,首先将employees对象包装成为lodash对象,再map获取所有用户的名称,并最后利用join将用户名称以”,“连接在一起。 获取最年轻的员工 var o1 = _.chain(employees) .sortBy("age") .map(function (employee) { return employee; }) .first() .value(); console.log(o1); // 输出:Object {name: "zhangsan", age: 30, salary: 5000} 获取工资最多的员工 var o2 = _.chain(employees) .orderBy("salary", "desc") .map(function (employee) { return employee; }) .first() .value(); console.log(o2); // 输出:Object {name: "wangwu", age: 32, salary: 6000} 获取年龄等于36的员工 var o3 = _.chain(employees) .filter(function (employee) { return employee.age = 36; }) .map(function (employee) { return employee; }) .first() .value(); console.log(o3); // 输出:Object {name: "lisi", age: 36, salary: 4000} 数组到Map的转换 var hashmap = _.fromPairs(employees.map(function(employee) { return [employee.name, employee]; })); var o4 = hashmap ["wangwu"]; console.log(o4); // 输出:Object {name: "wangwu", age: 36, salary: 6000} 其他 |