loadsh中最常用的方法总结

1,090 阅读4分钟

loadsh中为我们总结了很多非常好用的方法,如果在一些场合能够正确的使用会让我们的代码更加简洁,以下是我总结的常用到的方法。

数组

1、**maxBy** 

 用来返回二位数组中内部某一个index为最大值的项,minBy用法和maxBy相同,区别为取最小值

var objects = [{ 'n': 1 }, { 'n': 2 }];

maxBy(objects, function(o) { return o.n; });
// result {'n':1}
var arr=[[1,2],[2,3]]
maxBy(arr,function(o){return o[0]})
// result [2,3]
2、**max** 

 返回数组中的最大值

let arr=[2,3,4,5]
max(arr)
// result 5  如果为空数组则返回underfined
3、 **findIndex**

返回数组加对象结构中对象的key值为固定值的索引

let arr=[{name:'linda',value:'1000'},{name:'wangli',value:'210'}]
const currentIndex=findIndex(arr,(tar)=>tar.name==='linda'})
// result 0
const currentIndex=findIndex(arr,(tar)=>tar.name='111'})
// result -1
4、**pull **

移除·数组中和给定值相等的元素,该方法会改变数组

var array = [1, 2, 3, 1, 2, 3];
pull(array, 2, 3);
console.log(array);
// => [1, 1]
5、**pullAll** 

移除原数组中给定数组的所有元素,value值为数组

var array=[1,2,3,4,5,6]
pullAll(array,[1,2])
// result =>[3,4,5,6]
6、**remove **

移除函数中返回为true的元素,并返回移除的元素,该方法会改变数组

var array = [1, 2, 3, 4];
var evens = _.remove(array, function(n) {
  return n % 2 == 0;
});

console.log(array);
// => [1, 3]

console.log(evens);
// => [2, 4]
7、**union **

将多个数组进行合并,并过滤掉相同的值,组合成一个新数组,按从大到小排列

union([2], [1, 2]);
// => [2, 1]
8、**isArray** 

检查是否是array类对象

isArray([1, 2, 3]);
// => true
isArray('ba')
//=> false
9、**mean** 

计算数组的平均值

mean([3,4,5])
//=>4
10、**sum **

计算数组中值的和

_.sum([4, 2, 8, 6]);
// => 20
11、**sample(array,num)** 

从列表中随机选择一个值,num可以指定随机选择值得个数

var luckyDraw = ["Colin", "John", "James", "Lily", "Mary"];
_.sample(luckyDraw, 2); // ['John','Lily']

对象

1、**cloneDeep** 

 深克隆对象

var objA = {
	"name": "colin"
}
var objB =cloneDeep(objA);
objB === objA // false
2、**map** 

 迭代数组并返回每一项中深度嵌套的属性,等同于es6中的map,但用着更加方便

var ownerArr = [{
	"owner": "Colin",
	"pets": [{"name":"dog1"}, {"name": "dog2"}]
}, {
	"owner": "John",
	"pets": [{"name":"dog3"}, {"name": "dog4"}]
}];

map(ownerArr, 'pets[0].name');
3、**assign **

扩展对象,合并多个对象,并覆盖值相同的对象,返回合并之后对象

var objA = {"name": "colin", "car": "suzuki"};
var objB = {"name": "james", "age": 17};
var objC = {"pet": "dog"};

// Lodash
_.assign(objA, objB, objC)
// {"name": "james", "car": "suzuki", "age": 17, "pet": "dog"}
4、**omit(object,[props])**  

删除对象中指定props的键值对,[props]可以是一个数组,同时删除多个键值对,也可以是一个string,也可以是一个比较器,删除值为true的键值对, _.omit 方法会返回一个新的对象,而不会修改原来的对象。

var objA = {"name": "colin", "car": "suzuki", "age": 17};
omit(objA, ['car', 'age']); // {"name": "colin"}
omit(objA,'car')  //{"name":"colin","age":17}
omit(objA,isNumber)  //传入一个比较器,删除值为number的键值对   {"name":"colin","car":"suzuki"}
5、**pick(object,[props])**

和omit相反,它会从对象中选择指定的属性组装成新的对象,不会改变原来对象

var objA = {"name": "colin", "car": "suzuki", "age": 17};

var objB = objA.pick(['car', 'age']);
// {"car": "suzuki", "age": 17}

// Lodash
var objB = _.pick(objA, ['car', 'age']);
6、**parse(object)**

如果直接使用JSON.parse对接收的对象进行处理的话,如果接收的值不是一个对象,很可能会报错,使用parse处理时如果格式不正确会返回false

parse('a'); // false
parseLodash('a');
parse('{"name": "colin"}'); // Return {"name": "colin"}

二维及以上结构处理

1 **cloneDeep **

可以深拷贝多维引用结构

var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);//返回的值是深拷贝之后的值
2、 **isEqual **

用来检验两者的值是否完全相等,深拷贝来进行检验值而非检验地址

var object = { 'a': 1 };
var other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false
3、 **findIndex** 

 返回数组加对象结构中对象的key值为固定值的索引

let arr=[{name:'linda',value:'1000'},{name:'wangli',value:'210'}]
const currentIndex=findIndex(arr,(tar)=>tar.name==='linda'})
// result 0
const currentIndex=findIndex(arr,(tar)=>tar.name='111'})
// result -1

其他好用的方法

1、**castArray** 

如果要处理的value值不是数组,那么将强制转化为数组,可以用来处理对请求数据使用数组方法时,对underfind、null等非数组的值进行处理

castArray(1);
// => [1]
castArray({ 'a': 1 });
// => [{ 'a': 1 }]
castArray('abc');
// => ['abc']
castArray(null);
// => [null]
castArray(undefined);
// => [undefined]
castArray();
// => []
2、 **ceil(number,precision)**  

根据precision(精度)向上舍入number,精度可以理解为保留几位小数,如果精度为负,则可以理解为-1相对于10向上取整,-2相对于100向上取整

floor和ceil用法相同,区别为向下取整,round和ceil用法相同区别为四舍五入
_.ceil(4.006);
// => 5

_.ceil(6.004, 2);
// => 6.01

_.ceil(6040, -2);
// => 6100
3、**random(lower,upper,float)**

在指定的两个数之间取一个随机数,第三个参数float表示取的值是否包含浮点数

random(0,5)===random(5)  //返回0到5之间的整数
random(0,5,true)  //返回0到5之间的浮点数
random(1.2,3.3) //返回1.2到3.3之间的浮点数