lodash会拷贝一份新数组,不会对之前的数组进行影响
数据的基础处理
- 浅拷贝&&深拷贝
_.clone()
_.cloneDeep(oldOption);
- 数组的分割,将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块
// 一般在测试的时候用于较大返回数据的数据分割
_.chunk(list)[size]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
- 排序,根据data的index字段进行降序排列,后面可以添加更多的字段和排序标准
// 根据data的index字段进行降序排列
let descData = _.orderBy(data, ['index'],['desc']);
// 以 `user` 升序排序 再 `age` 以降序排序。
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
- 根据某个字段返回一个新数组
var users = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];
var c7 = _.map(users, 'user'); //[ 'barney', 'fred' ]
var c8 = _.map(users,o=>o.user) //[ 'barney', 'fred' ]
5.分组,数组中的元素根据某个条件组成新的数组
_.groupBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': [4.2], '6': [6.1, 6.3] }
// The `_.property` iteratee shorthand.
_.groupBy(['one', 'two', 'three'], 'length');
// => { '3': ['one', 'two'], '5': ['three'] }
6.元素的筛选,遍历 collection(集合)元素,返回 predicate(断言函数)返回真值 的所有元素的数组。 predicate(断言函数)调用三个参数:(value, index|key, collection)。
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.filter(users, function(o) { return !o.active; });
// => objects for ['fred']
// The `_.matches` iteratee shorthand.
_.filter(users, { 'age': 36, 'active': true });
// => objects for ['barney']
// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']
// The `_.property` iteratee shorthand.
_.filter(users, 'active');
// => objects for ['barney']
增
- 多个数组的拼接
let list1 = ['1'];
let list2 = ['2'];
let concatList = _.concat(list1, list2);
// concatList = ['1','2'];
删
- 两个数组之间进行差异数据的去除处理,会改变原先的数组
// 删掉指定元素
var array = [1, 2, 3, 1, 2, 3];
_.pullAll(array, [2, 3]);
console.log(array);
// => [1, 1]
// 根据gridid字段的值,去掉aList中bList数组的值
let remainingSelectedList = _.pullAllBy(aList,bList,'gridid');
// tips:
_.differenceBy, 这个方法不会改变数组 `array`。
- 根据数组中的某个元素作为标准进行的去重
// 简单版
_.uniq([2, 1, 2]);
// => [2, 1]
// 进阶版
let uniqList = _.uniqBy(list,(item)=> {
return item.gridid
})
// or
let uniqList = _.uniqBy(list,'gridid')
查
- 检查
value
(值) 是否在collection
(集合) 中。如果collection
(集合)是一个字符串,那么检查value
(值,子字符串) 是否在字符串中, 否则使用 [SameValueZero
]做等值比较。 如果指定fromIndex
是负数,那么从collection
(集合) 的结尾开始检索。
let trueOrFalse = _.includes(city.bottomLayerDeleteList,item.gridid)) ;
var smartPerson = {
'name': '戈德斯文',
'gender': 'male'
},
smartTeam = ["戈德斯文", "杨海月", "柴硕", "师贝贝"];
console.log(_.includes(smartPerson, '戈德斯文'));
console.log(_.includes(smartTeam, '杨海月'));
console.log(_.includes(smartTeam, '杨海月',2));
_.includes() 第一个参数是需要查询的对象,
第二个参数是需要查询的元素,
第三个参数是开始查询的下标
Tips:
// 数组中的值是基础元素类型,可以直接进行等值比较
_.pullAll(array, values);
// 数组中的元素是对象类型,区别是这个方法接受一个 iteratee(迭代函数) 调用 array 和 values的每个值以产生一个值,通过产生的值进行了比较。iteratee 会传入一个参数: (value)。
_.pullAllBy(array, values, [iteratee=_.identity]);
// 数组中的元素是对象类型,这个方法接受 comparator 调用array中的元素和values比较。comparator 会传入两个参数:(arrVal, othVal)。
_.pullAllWith(array, values, [comparator]);