javascript:Lodash应用方法与实例

374 阅读4分钟

Lodash是一个拥有大量有用功能的javascript库,我们可以很容易地与任何javascript应用程序集成。 采集不同类型的数据,如字符串、数组和对象。Javascript提供了第一类函数。一级函数就像变量一样,我们可以将其存储在一个变量中,作为参数传递给函数,并从函数中返回。在javascript中,函数就像变量一样,数组和对象中的每一项都可以应用于函数。因此,集合对象中的每个函数将适用于集合数据中的每个元素。让我们看看集合/数组对象的各种例子,并举例说明
这是一个关于lodash库的后续文章的连续文章。

查找函数的例子

有三个函数filter、find和findRight用于过滤或查找集合或数组中的元素 filter函数的例子--迭代数组/对象的列表并根据一些条件进行过滤

var emps = [  
  { 'name': 'franc',  'id': 4, 'salary': 50000 },  
  { 'name': 'kiran',    'id': 20, 'salary': 40000 },  
  { 'name': 'ram', 'id': 31,  'salary': 60000 }  
  { 'name': 'abv', 'id': 21,  'salary': 30000 }  
  
];  
let result=_.filter(emps, function(emp) {  
    return emp.salary >= 50000 ;  
});  
output is   
{ 'name': 'franc',  'id': 4, 'salary': 50000 },  
  { 'name': 'ram', 'id': 31,  'salary': 60000 }  
  

根据一个条件过滤工资大于或等于50000的员工列表

lodash查找方法示例

遍历元素并返回与条件匹配的第一个元素

var emps = [  
  { 'name': 'franc',  'id': 4, 'salary': 50000 },  
  { 'name': 'kiran',    'id': 20, 'salary': 40000 },  
  { 'name': 'ram', 'id': 31,  'salary': 60000 },  
  { 'name': 'abv', 'id': 21,  'salary': 30000 }  
  
];  
let result=_.find(emps, function(emp) {  
    return emp.salary >= 1000000 ; // outputs  undefined  
});  
let result=_.find(emps, function(e) {  
    return e.salary >= 400000 ; // outputs   { 'name': 'franc',  'id': 4, 'salary': 50000 },  
  
});  

findLast方法示例

这个方法也像find方法一样在一个集合中迭代元素,但是迭代是从右到左或者从最后到第一个元素。

// this outputs abv ram kiran franc  
let result=_.findLast(emps, function(emp) {  
console.log(emp.name)   
});  
  
// this outputs franc kiran ram abv  
let result1=_.find(emps, function(emp) {  
console.log(emp.name)  
});  

迭代集合/数组示例

迭代是对集合或数组对象中的每个元素进行迭代。这也使用了第一类函数,在迭代中每个元素都应用了函数。这可以作为回调应用于每个元素 我们将看到下面的例子

forEach函数示例

forEach是用来迭代集合中的元素的,就像一个对象/元素的数组。语法是forEach(collection/array objects, function(object,key/index,collection) object是collection/array的每个对象。这需要key是一个集合/数组的索引,从0开始,可选的collection是一个原始集合,可选的Function将被应用到每个元素。返回的类型是一个集合。

  
_.forEach(['for', 'each'], function(value) {  
  console.log(value);  
});  
//this outputs 'for' and 'each'  
  
_.forEach(emps, function(obj,key,e) {  
    console.log(obj.name+'='+obj.id);  
  
});  
//this outputs   
//franc=4  
//kiran=20  
//ram=31  
//abv=21  

forEachRight方法

这也和forEach方法一样,但是从右到左遍历元素,参数和规则和forEach方法一样。

  
_.forEachRight(['a', 'b','c'], function(value) {  
  console.log(value);  
});  
//this outputs 'c','b' and 'a'  
  
_.forEachRight(emps, function(obj,key,e) {  
    console.log(obj.name+'='+obj.id);  
  
});  
//this outputs   
//abv=21  
//ram=31  
//kiran=20  
//franc=4  

地图方法的例子

这个方法也是遍历一个集合/数组中的每个元素,对每个元素应用函数,并返回一个新的数组。这个方法有保护的方法,你可以和不同的方法一起使用,比如curry, every, filter方法

  
function addTen(n) {  
  return n+10;  
}  
   
console.log(_.map([4, 6], addTen));// outputs  [14, 16]  
console.log(_.map(emps, 'name')); // outputs ["franc", "kiran", "ram", "abv"]  
console.log(_.map(emps, 'salary')); // outputs [50000, 40000, 60000, 30000]  
console.log(_.map(emps, 'id')); // outputs  [4, 20, 31, 21]  

(_.map(emps, 'id')是一个属性速记迭代的例子,我们可以直接使用属性的名称,代码可以减少。
javascript中map和forEach的区别

  • map在性能上比foreach方法快 Map返回新的数组,源数组不会被改变。 forEach返回同一个数组

every()和some()方法的例子

every方法--检查集合中与表达式匹配的每个元素 every(collection/array, expression) some方法与every方法相反,检查与表达式匹配的任何元素 some(collection/array, expression)

console.log(_.some(['test', 1, false,'no'], Boolean)) // outputs true  
console.log(_.every(['test', 1, false,'no'], Boolean)) // outputs false  
console.log(_.some(emps, { 'name': 'franc',  'id': 4, 'salary': 50000 })) // outputs true  
console.log(_.every(emps, { 'name': 'franc',  'id': 4, 'salary': 50000 })) // outputs false  

如何在javascript/lodash中把对象转换成一个数组?

一个对象包含以下数据,我们需要将其转换为数组。 map函数接收一个对象,遍历其元素并返回一个数组。

var objectVariable = {  
    k1: {id: 1, name: 'kiran'},  
    k2: {id: 2, name: 'frank'},  
    k3: {id: 3, name: 'john'}  
};  
  
var arrayVariable = _.map(objectVariable, v=>v);  
console.log('Array 1: ', arrayVariable);  
// returns [{id: 1, name: "kiran"},{id: 2, name: "frank"},{id: 3, name: "john"}]