目录:
- 1、数组去重
- 2、查找数组最大
- 3、查找数组最小
- 4、返回已 size 为长度的数组分割的原数组
- 5、检查数组中某元素出现的次数
- 6、对比两个数组并且返回其中不同的元素
- 7、返回两个数组中相同的元素
- 8、从右删除 n 个元素
- 9、截取第一个符合条件的元素及其以后的元素
- 10、返回数组中下标间隔 nth 的元素
- 11、返回数组中第 n 个元素
- 12、返回数组末尾元素
- 13、数字千分位分割
- 14、生成随机数
- 15、数组通过某个字段进行分组
- 16、URL参数的提取
- 17、冒泡排序算法
- 18、计算一个数组中最大值和最小值的差
- 19、随机生成指定长度的字符串
- 20、获取指定范围内的随机数
- 21、随机获取数组中的元素
- 22、找出数组中出现此说最多的元素,并给出出现过的位置
- 23、 给定一个字符串,每隔n个字符添加一个“,”
- 24、js去掉空格字符串
- 25、两个函数function
- 27、对象转化为数组
- 28、随机生成字母和数组的组合
- 29、数组降维度
- 30、判断变量是否为数组
- 31、数组占位
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); //["", "", ""]