loadsh中为我们总结了很多非常好用的方法,如果在一些场合能够正确的使用会让我们的代码更加简洁,以下是我总结的常用到的方法。
数组
用来返回二位数组中内部某一个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]
返回数组中的最大值
let arr=[2,3,4,5]
max(arr)
// result 5 如果为空数组则返回underfined
返回数组加对象结构中对象的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
移除·数组中和给定值相等的元素,该方法会改变数组
var array = [1, 2, 3, 1, 2, 3];
pull(array, 2, 3);
console.log(array);
// => [1, 1]
移除原数组中给定数组的所有元素,value值为数组
var array=[1,2,3,4,5,6]
pullAll(array,[1,2])
// result =>[3,4,5,6]
移除函数中返回为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]
将多个数组进行合并,并过滤掉相同的值,组合成一个新数组,按从大到小排列
union([2], [1, 2]);
// => [2, 1]
检查是否是array类对象
isArray([1, 2, 3]);
// => true
isArray('ba')
//=> false
计算数组的平均值
mean([3,4,5])
//=>4
计算数组中值的和
_.sum([4, 2, 8, 6]);
// => 20
从列表中随机选择一个值,num可以指定随机选择值得个数
var luckyDraw = ["Colin", "John", "James", "Lily", "Mary"];
_.sample(luckyDraw, 2); // ['John','Lily']
对象
深克隆对象
var objA = {
"name": "colin"
}
var objB =cloneDeep(objA);
objB === objA // false
迭代数组并返回每一项中深度嵌套的属性,等同于es6中的map,但用着更加方便
var ownerArr = [{
"owner": "Colin",
"pets": [{"name":"dog1"}, {"name": "dog2"}]
}, {
"owner": "John",
"pets": [{"name":"dog3"}, {"name": "dog4"}]
}];
map(ownerArr, 'pets[0].name');
扩展对象,合并多个对象,并覆盖值相同的对象,返回合并之后对象
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"}
删除对象中指定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"}
和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']);
如果直接使用JSON.parse对接收的对象进行处理的话,如果接收的值不是一个对象,很可能会报错,使用parse处理时如果格式不正确会返回false
parse('a'); // false
parseLodash('a');
parse('{"name": "colin"}'); // Return {"name": "colin"}
二维及以上结构处理
可以深拷贝多维引用结构
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);//返回的值是深拷贝之后的值
用来检验两者的值是否完全相等,深拷贝来进行检验值而非检验地址
var object = { 'a': 1 };
var other = { 'a': 1 };
_.isEqual(object, other);
// => true
object === other;
// => false
返回数组加对象结构中对象的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
其他好用的方法
如果要处理的value值不是数组,那么将强制转化为数组,可以用来处理对请求数据使用数组方法时,对underfind、null等非数组的值进行处理
castArray(1);
// => [1]
castArray({ 'a': 1 });
// => [{ 'a': 1 }]
castArray('abc');
// => ['abc']
castArray(null);
// => [null]
castArray(undefined);
// => [undefined]
castArray();
// => []
根据precision(精度)向上舍入number,精度可以理解为保留几位小数,如果精度为负,则可以理解为-1相对于10向上取整,-2相对于100向上取整
_.ceil(4.006);
// => 5
_.ceil(6.004, 2);
// => 6.01
_.ceil(6040, -2);
// => 6100
在指定的两个数之间取一个随机数,第三个参数float表示取的值是否包含浮点数
random(0,5)===random(5) //返回0到5之间的整数
random(0,5,true) //返回0到5之间的浮点数
random(1.2,3.3) //返回1.2到3.3之间的浮点数