1. /*数组扁平化 a:[1,[1,2],[1,[1,2] =>[1,1,2,1,1,2]*/
    2. var arr = [1, [2, [3, 4]]];
    3. function flatten(arr) {
    4. while (arr.some(item => Array.isArray(item))) {
    5. arr = [].concat(...arr);
    6. }
    7. return arr;
    8. }
    9. /*判断一个元素是否在数组中*/
    10. contains (arr, val) {
    11. return arr.indexOf(val) != -1 ? true : false;
    12. }
    13. /**
    14. * @param {arr} 数组
    15. * @param {fn} 回调函数
    16. * @return {undefined}
    17. */
    18. each (arr, fn) {
    19. fn = fn || Function;
    20. var a = [];
    21. var args = Array.prototype.slice.call(arguments, 1);
    22. for(var i = 0; i < arr.length; i++) {
    23. var res = fn.apply(arr, [arr[i], i].concat(args));
    24. if(res != null) a.push(res);
    25. }
    26. }
    27. /**
    28. * @param {arr} 数组
    29. * @param {fn} 回调函数
    30. * @param {thisObj} this指向
    31. * @return {Array}
    32. */
    33. map (arr, fn, thisObj) {
    34. var scope = thisObj || window;
    35. var a = [];
    36. for(var i = 0, j = arr.length; i < j; ++i) {
    37. var res = fn.call(scope, arr[i], i, this);
    38. if(res != null) a.push(res);
    39. }
    40. return a;
    41. }
    42. /**
    43. * @param {arr} 数组
    44. * @param {type} 1:从小到大 2:从大到小 3:随机
    45. * @return {Array}
    46. */
    47. sort (arr, type = 1) {
    48. return arr.sort( (a, b) => {
    49. switch(type) {
    50. case 1:
    51. return a - b;
    52. case 2:
    53. return b - a;
    54. case 3:
    55. return Math.random() - 0.5;
    56. default:
    57. return arr;
    58. }
    59. })
    60. }
    61. /*去重*/
    62. unique (arr) {
    63. if ( Array.hasOwnProperty('from') ) {
    64. return Array.from(new Set(arr));
    65. }else{
    66. var n = {},r=[];
    67. for(var i = 0; i < arr.length; i++){
    68. if (!n[arr[i]]){
    69. n[arr[i]] = true;
    70. r.push(arr[i]);
    71. }
    72. }
    73. return r;
    74. }
    75. }
    76. /*求两个集合的并集*/
    77. union (a, b) {
    78. var newArr = a.concat(b);
    79. return this.unique(newArr);
    80. }
    81. /*求两个集合的交集*/
    82. intersect (a, b) {
    83. var _this = this;
    84. a = this.unique(a);
    85. return this.map(a, function(o) {
    86. return _this.contains(b, o) ? o : null;
    87. });
    88. }
    89. /*删除其中一个元素*/
    90. remove (arr, ele) {
    91. var index = arr.indexOf(ele);
    92. if(index > -1) {
    93. arr.splice(index, 1);
    94. }
    95. return arr;
    96. }
    97. /*将类数组转换为数组的方法*/
    98. formArray (ary) {
    99. var arr = [];
    100. if(Array.isArray(ary)) {
    101. arr = ary;
    102. } else {
    103. arr = Array.prototype.slice.call(ary);
    104. };
    105. return arr;
    106. }
    107. /*最大值*/
    108. max (arr) {
    109. return Math.max.apply(null, arr);
    110. }
    111. /*最小值*/
    112. min (arr) {
    113. return Math.min.apply(null, arr);
    114. }
    115. /*求和*/
    116. sum (arr) {
    117. return arr.reduce( (pre, cur) => {
    118. return pre + cur
    119. })
    120. }
    121. /*平均值*/
    122. average (arr) {
    123. return this.sum(arr)/arr.length
    124. }