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"}]