前端常用数据算法js函数片段合集【持续更新】

1、数组去重

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

2、查找数组最大

function arrayMax(arr) {
	return Math.max(...arr);
}
//同时获取数组中最大值和最小值返回
function maxAndMin(arr){
	return {
		max:Math.max.apply(null,arr),
		min:Math.min.apply(null,arr)
	}
}

3、查找数组最小

function arrayMin(arr) {
	return Math.min(...arr);
}
//同时获取数组中最大值和最小值返回
function maxAndMin(arr){
	return {
		max:Math.max.apply(null,arr),
		min:Math.min.apply(null,arr)
	}
}

4、返回已 size 为长度的数组分割的原数组

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

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

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

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

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

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

function intersection(arr1, arr2) {
	return arr2.filter((v) => arr1.includes(v));
}

8、从右删除 n 个元素

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

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

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

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

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

11、返回数组中第 n 个元素

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

12、返回数组末尾元素

function last(arr) {
return arr[arr.length - 1];
}

13、数字千分位分割

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

14、生成随机数

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;
  }
}

15、数组通过某个字段进行分组

function groupArr(list,field){
   var fieldList = [],att=[];
   list.map((e)=>{
       fieldList.push(e[field])
   })
   //数组去重
   fieldList = fieldList.filter((e,i,self)=>{
       return self.indexOf(e)==i
   })
   for(var j=0;j<fieldList.length;j++){
       //过滤出匹配到的数据
       var arr = list.filter((e)=>{
           return e.id==fieldList[j];
       })
       att.push({
           type:arr[0].type,
           list:arr
       })
   }
   return att;
}

16、URL参数的提取

function getURL(url) {
	var result = {};
	var parmList = url.split("?")[1];
	var parm = 	parmList.split("&");
	for(let i=0; i<parm.length; i++) {
		//拆分后数组中有几个元素,若只有一个则value为undefined
		if(parm[i].split("=").length == 2) {
			result[parm[i].split("=")[0]] = parm[i].split("=")[1];
		} else {
			result[parm[i].split("=")[0]] = undefined;
		}
	}
	console.log(result);
}

17、冒泡排序算法

function bubbleSort(arr) {
	var length = arr.length;
	for(let i = 0; i < length; i++) {
		//每一轮外循环,最后一个数已经排序完成
		for(let j = 0; j < length - i; j++) {
			if(arr[j] > arr[j+1]) {
				[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
			}
		}
	}
	return arr;
}

18、计算一个数组中最大值和最小值的差

function reduce(arr) {
	var max = arr[0];
	var min = arr[0];
	for(let i = 1; i < arr.length; i ++) {
		if(max < arr[i]) {
			max = arr[i]
		}
		if(min > arr[i]) {
			min = arr[i]
		}
	}
	return max - min;
}

19、随机生成指定长度的字符串

function randomString(n) {  
    var str = 'abcdefghijklmnopqrstuvwxyz9876543210';
    var tmp = '';
    var l = str.length;
    for (let i = 0; i < n; i++) {
      //tmp += str.charAt(Math.floor(Math.random() * l));
      tmp += str[Math.floor(Math.random() * l)];
    }
    return tmp;
}

20、获取指定范围内的随机数

function getRadomNum(min,max){
	return Math.floor(Math.random() * (max - min + 1)) + min;
}

21、随机获取数组中的元素

function getRadomArr(arr) {
	return arr[Math.floor(Math.random()*arr.length)];
}

22、找出数组中出现此说最多的元素,并给出出现过的位置

function getMaxAndIndex(arr){
	var result = {};
	var length = arr.length;
	for(let i = 0; i < length; i ++) {
		if(!result[arr[i]]) {
			result[arr[i]] = 1;
		}else {
			result[arr[i]] ++;
		}
	}
	var num = 0;
	var str = '';
	for(let key in result) {
		if(num < result[key]) {
			num = result[key];
			str = key;
		}
	}
	var index = [];
	for(let i = 0; i < arr.length; i ++) {
		if(arr[i] == str) {
			index.push(i)
		}
	}
	console.log(num,str,index);
}

23、 给定一个字符串,每隔n个字符添加一个“,”

function splitStr(str,n) {
	var arr = str.split("");
	var length = arr.length;
	if(n >= length) {
		return str;
	}
	var j = 0;
	for(let i = n; i < length; i = i + n) {
		arr.splice(i+j,0,",");
		j ++;
	}
	if (arr[arr.length - 1] == ",") {
		arr.splice(arr.length);
	}
	return arr.join("");
}

24、js去掉空格字符串

//去掉全部字符串
str = str.replace(/\s*/g,"");
//去掉左边字符串
str = str.replace(/^\s*/g,"");
//去掉右边字符串
str = str.replace(/\s*$/g,"");
//去掉两头空格
str = str.replace(/^\s*|\s*$/g,"");

25、两个函数function

// 假设现在有两个函数function A()和function B(),现在希望创建一个新的函数function C(),新函数的逻辑是将自己接收到的前两个参数传给函数A,剩余所有参数传给函数B,请用原生javascript实现函数C
//如果调用函数C:C[a,b,c,d,e]
//相当于调用函数A和函数B:A(a,b),B(c,d,e)
function C(){
     var a_args=Array.prototype.slice.call(argumens,0,2);
     var b_args=Array.prototype.slice.call(arguments,2);
     A.apply(this,a_args);
     B.apply(this,b_args);
}
function C(...s){
      A.call(this,s[0],s[1]);
      B.call(this,s.slice(2));
}
function C(...s){
      A.apply(this,s.slice(0,2));
      B.apply(this,s.slice(2));
}
function C(){
   A(arguments[0],arguments[1]);
   B(Array.prototype.slice.call(arguments,2));
}
function C(a1,a2,...args) {
    A(a1,a2)
    B(...args)
}

27、对象转化为数组

function objToArr(obj) {
   var result = [];
   for (let i in obj) {
       let o = {};
       o[i] = obj[i];
       result.push(o)
   }
   return result;
}

28、随机生成字母和数组的组合

Math.random().toString(36).substr(2);

29、数组降维度

// 二维数组
let arr = [ [1], [2], [3] ];
arr = Array.prototype.concat.apply([], arr);
console.log(arr);// [1, 2, 3]
let array = [ [1], [2], [3] ];
array = array.flat(2);
console.log(array); // [1, 2, 3]

// 多维数组
let arrMore = [1, 2, [3], [[4]]];
arrMore = arrMore.flat(Infinity);
console.log(arrMore); // [1, 2, 3, 4]

30、判断变量是否为数组

1.instanceof
2.array.__proto__.constructor === Array
3.array.constructor === Array
4.Array.isArray(兼容性问题)
5. Object.prototype.toString.call([]) === "[object Array]"(最通用)

PS:instanceof和constructor判断的变量,必须在当前页面声明。例如:父页面是一个框架,框架中引入一个页面(子页面),在子页面中申明的array,并将其复制给父元素的一个变量,这时instanceof和constructor判断该变量,将返回false。----------------------------------------------------------------------------------------------------------------- 原因:array是复合类型。在传递的过程中,仅仅是引用地址的传递。每个页面的array原生对象引用的地址是不一样的,在子页面中声明的array,所对应的构造函数,是子页面的array对象,在父页面进行判断时,使用的并不是子页面的array。

31、数组占位

let array = Array(3).fill('');
console.log(array); //["", "", ""]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值