[关闭]
@15013890200 2018-08-24T14:49:50.000000Z 字数 1584 阅读 560

javascript 常用方法(二)

原生javascript array


之前有整理过JavaScript的一些常用方法,链接,今天再来整理三个关于数组的常用方法,去重、排序、扁平化多维数组和拷贝数组


去重

  1. function removeDuplicate(arr) {
  2. /**
  3. * 利用对象的特性达到数组去重,性能很好
  4. * */
  5. if(!arr || arr.length < 2)return arr;
  6. let obj = {};
  7. let data = [];
  8. for(let i = 0,len = arr.length; i < len; i++){
  9. if(!obj[arr[i]]){
  10. obj[arr[i]] = true;
  11. data.push(arr[i]);
  12. }
  13. }
  14. return data;
  15. }

去重的方法有很多,网上一抓一大把,我这里只介绍我最喜欢用的,个人也觉得时间复杂度最低的,巧妙的利用对象不可重复的特性,在代码量和理解上都是最能够接受的。值得注意的是es6提供了array.from方法,在数组去重代码量上更简洁。


排序

  1. function sort(arr) {
  2. /**
  3. * 数值数组的排序
  4. * */
  5. if(!arr || arr.length < 2)return arr;
  6. arr.sort(compare);
  7. return arr;
  8. }
  9. function compare(val1,val2) {
  10. return val1-val2;
  11. }

javascript自带的sort,默认是对string进行排序,即使你传入的是数值数组输出结果也是按照string来排的。
当然,网上的数组排序方法也很多,选择排序、快速排序、递归排序等。感兴趣的可以自行百度了解,笔者依然只介绍笔者最偏爱的排序方法。
该方法有个弊端,只能用于javascript语言,因为它中间还是调用了javascript的sort方法,不过传入了一个compare方法作为参数。代码量上十分精简,不过理解上就没那么直观了。


扁平化

  1. //方法一
  2. function flattenStr(arr) {
  3. /**
  4. * 先将数组转化为字符串,再将字符串分割
  5. * */
  6. let str = arr.join(',');
  7. return str.split(',');
  8. }
  9. //方法二
  10. function flatten(arr) {
  11. /**
  12. * 一个个出栈数组的元素
  13. * 判断元素是否是数组
  14. * ... 是es6的运算符:将一个数组转为用逗号分隔的参数序列。
  15. * */
  16. if(!arr || arr.length < 1)return arr;
  17. let arr2 = [...arr].reverse();
  18. let data = [];
  19. while(arr2.length){
  20. let item = arr2.pop();
  21. if(Array.isArray(item)){
  22. arr2.push(...item.reverse());
  23. }
  24. else {
  25. data.push(item);
  26. }
  27. }
  28. return data;
  29. }

方法一:实现和阅读都很简单,缺点:会改变原来数组的数据类型,返回的数组一律都是字符串数组
方法二:实现稍微复杂,但是可以保证数据原样输出。
当对输出数据没那么严格要求时,或者有特殊要求时(转化为string)方法一是最好的,其他情况最好用方法二。


拷贝数组

  1. function copy(arr) {
  2. return JSON.parse(JSON.stringify(arr));
  3. }

拷贝数组方法可以利用JSON的特性,也可以用枚举的方法赋值给新数组。这里我只介绍自己最偏爱也是最优的数组拷贝方法。


最后,和之前的做法一样,将方法赋值给全局变量util的相关属性,这样就可以通过window.util.或者util.来调用相关的方法。

  1. window.util = {
  2. 'removeDuplicate': removeDuplicate,
  3. 'sort': sort,
  4. 'flatten': flatten,
  5. 'flattenStr': flattenStr
  6. 'copy': copy
  7. };
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注