lodash入门

2018-09-13  本文已影响0人  彭奕泽

1. _.orderBy

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 34 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 36 }
];

_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
// 先按照'user'的升序排序,若相同则按age的降序排序
// 数据结构还是和之前user的数组一样,只是顺序变了
subjects = _.orderBy(subjects, a => a.en_name === 'english' ? 1 : 2)

a.en_name === 'english'的值是1,其余的都是2,然后从小到大排序,这样english就放到前面了

a = [{canGrade: 0,canScore: 0,}, {canGrade: 1,canScore: 0,}, {canGrade: 1,canScore: 1,}, {canGrade: 0,canScore: 1,}]
_.orderBy(a, ['canGrade', 'canScore'], ['desc', 'desc'])

0: {canGrade: 1, canScore: 1}
1: {canGrade: 1, canScore: 0}
2: {canGrade: 0, canScore: 1}
3: {canGrade: 0, canScore: 0}

18. sortBy

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 }
];
 
_.sortBy(users, [o => o.user]);
// [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
 
_.sortBy(users, ['user', 'age']);
// => [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
let subjects = [{name: 'a'}, {name: 'b'}, {name: 'c'}, {name: 'd'}, {name: 'English'}]
subjects = _.sortBy(subjects, o => o.name !== 'English')
// [{name: 'English'}, {name: 'a'}, {name: 'b'}, {name: 'c'}, {name: 'd'}]
this.allExamList = _.sortBy(
  this.allExamList,
  [(o: any) => -o.canGrade,  (o: any) => -o.canScore]
);

让canGrade === 1的时候要放在前面,再让canScore === 1的排在第二,两个都没有的排在最后,加个负号是因为sortBy默认从小到大排,所以加个负号反过来,从大到小排

2. _.keyBy

var array = [
  { 'dir': 'left', 'code': 97 },
  { 'dir': 'right', 'code': 100 },
  { 'dir': 'pyz', 'code': 101 },
];

_.keyBy(array, 'dir');
// 数据结构会变为对象
// {
//  left: { 'dir': 'left', 'code': 97 },
//  right:  { 'dir': 'right', 'code': 100 },
//  pyz: { 'dir': 'pyz', 'code': 101 },
// }

3. _.groupBy

_.groupBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': [4.2], '6': [6.1, 6.3] }

_.groupBy(['one', 'two', 'three'], 'length');
// => { '3': ['one', 'two'], '5': ['three'] }

4. _.map

function square(n) {
  return n * n;
}

_.map([4, 8], square);
// => [16, 64]

_.map({ 'a': 4, 'b': 8 }, square);
// => [16, 64]

var users = [
  { 'user': 'barney' },
  { 'user': 'fred' }
];
_.map(users, 'user');

5. _.forEach

_.forEach([1, 2], function(value) {
  console.log(value);
});
// 1 2

_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  console.log(key);
});
// a b

6. _.flatten

_.flatten(['p', ['y', ['z', ['j']], 'p']]);
// ["p", "y", Array(2), "p"],貌似只能打平第一层

7. _.unipBy

_.uniqBy([2.1, 1.2, 2.3, 2.4, 2.8, 2.9, 3.2], Math.floor);
// [2.1, 1.2, 3.2]

_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// [{ 'x': 1 }, { 'x': 2 }]

8. _.sample

_.sample([1,'p', 3, 4]);
// 好像是随机选出一个数

9. _.shuffle

_.shuffle([1, 2, 3, 4]);
// 洗牌的意思,就是打乱

10. _.clone

var objects = [{ 'a': 1 }, { 'b': 2 }];
 
var shallow = _.clone(objects);
console.log(shallow === objects);
// false
console.log(shallow[0] === objects[0]);
// true

只能深复制第一层

11. _.cloneDeep

var objects = [{ 'a': 1 }, { 'b': 2 }];
 
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false

这就是深复制

12. _.isEqual

var object = { 'a': 1 };
var other = { 'a': 1 };
 
_.isEqual(object, other);
// => true
 
object === other;
// => false

13. minBy

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

_.minBy(objects, 'n');
// => { 'n': 1 }

14. _.sumBy

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
 
_.sumBy(objects, 'n');
// => 20

15. _.merge

var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};
 
var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};
 
_.merge(object, other);
// { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }

16. _.pick

var object = { 'a': 1, 'b': '2', 'c': 3 };
 
_.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }

17. omit

var object = { 'a': 1, 'b': '2', 'c': 3 };
 
_.omit(object, ['a', 'c']);
// => { 'b': '2' }

反向选择

19. intersection

寻找两个数组里相同的数据

_.intersection([2, 1], [2, 3]);
// [2]

20. uniqBy 去重

_.uniqBy([2, 1, 2, 2, 2, 2, 45, 45, 60])
// [2, 1, 45, 60]
上一篇 下一篇

猜你喜欢

热点阅读