JavaScript函数常用片段(数组,数字)


数组 Array

数组去重

function noRepeat(arr) {
  return [...new Set(arr)];
}

查找数组最大

function arrayMax(arr) {
  return Math.max(...arr);
}

查找数组最小

function arrayMin(arr) {
  return Math.min(...arr);
}

将数组分割成多个数组

size分割的长度

function chunk(arr, size = 1) {
  return Array.from(
    {
      length: Math.ceil(arr.length / size),
    },
    (v, i) => arr.slice(i * size, i * size + size)
  );
}

Math.ceil() 函数返回大于或等于一个给定数字的最小整数。
console.log(Math.ceil(.95));
// expected output: 1

console.log(Math.ceil(4));
// expected output: 4

console.log(Math.ceil(7.004));
// expected output: 8

检查数组中某元素出现的次数

function countOccurrences(arr, value) {
  return arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0);
}

reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10

// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15

扁平化数组

数组扁平化概念
数组扁平化是指将一个多维数组变为一维数组
[1, [2, 3, [4, 5]]] ——> [1, 2, 3, 4, 5]

1. reduce

遍历数组每一项,若值为数组则递归遍历,否则concat。

function flatten(arr) {  
    return arr.reduce((result, item)=> {
        return result.concat(Array.isArray(item) ? flatten(item) : item);
    }, []);
}

2. toString & split

调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组

function flatten(arr) {
    return arr.toString().split(',').map(function(item) {
        return Number(item);
    })
} 
因为split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型

3. join & split

和上面的toString一样,join也可以将数组转换为字符串

function flatten(arr) {
    return arr.join(',').split(',').map(function(item) {
        return parseInt(item);
    })
}

4. 递归

function flatten(arr) {
    var res = [];
    arr.map(item => {
        if(Array.isArray(item)) {
            res = res.concat(flatten(item));
        } else {
            res.push(item);
        }
    });
    return res;
}

5. 扩展运算符

es6的扩展运算符能将二维数组变为一维
[].concat(…[1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]
根据这个结果我们可以做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。

function flatten(arr) {
    while(arr.some(item=>Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}

对比两个数组并且返回其中不同的元素

function diffrence(arrA, arrB) {
  return arrA.filter((v) => !arrB.includes(v));
}

返回两个数组中相同的元素

function diffrence(arrA, arrB) {
  return arrA.filter((v) => arrB.includes(v));
}

从右删除 n 个元素

function dropRight(arr, n = 0) {
  return n < arr.length ? arr.slice(0, arr.length - n) : [];
}

截取第一个符合条件的元素及其以后的元素

function dropElements(arr, fn) {
  while (arr.length && !fn(arr[0])) arr = arr.slice(1);
  return arr;
}

返回数组中下标间隔 nth 的元素

function everyNth(arr, nth) {
  return arr.filter((v, i) => i % nth === nth - 1);
}

返回数组中第 n 个元素

function nthElement(arr, n = 0) {
  return (n >= 0 ? arr.slice(n, n + 1) : arr.slice(n))[0];
}

数组乱排

function shuffle(arr) {
  let array = arr;
  let index = array.length;

  while (index) {
    index -= 1;
    let randomInedx = Math.floor(Math.random() * index);
    let middleware = array[index];
    array[index] = array[randomInedx];
    array[randomInedx] = middleware;
  }

  return array;
}

数字 Number

数字千分位分割

function commafy(num) {
  return num.toString().indexOf(".") !== -1
    ? num.toLocaleString()
    : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,");
}

生成随机数

function randomNum(min, max) {
  switch (arguments.length) {
    case 1:
      return parseInt(Math.random() * min + 1, 10);
    case 2:
      return parseInt(Math.random() * (max - min + 1) + min, 10);
    default:
      return 0;
  }
}

文章作者: Kuma
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kuma !
 上一篇
JavaScript函数常用片段(BOM,Cookie,DOM) JavaScript函数常用片段(BOM,Cookie,DOM)
浏览器对象 BOM返回当前网页地址function currentURL() { return window.location.href; } 获取滚动条位置function getScrollPosition(el = window)
下一篇 
Git命令笔记 Git命令笔记
Git命令实例将本地项目上传到github 1.新建一个桌面文件夹,进入文件夹内 2.打开github,新建一个仓库,进入仓库复制链接地址(github-url) 3.在文件夹内打开Git Bash Here 4.将git仓库复制到本地文件
  目录