1、查找数组中包含指定元素的个数
countNum(arr,res) {
let newArrays = arr.filter((item)=>{
return item == res;
});
return newArrays.length;
},
console.log(countNum(['1','2','1','3'] , '1')) // 2
2、去除数组中的空节点
let arr = ['A', '', 'B', null, undefined, 'C', ' '];
let r = arr.filter((s) => {
return s && s.trim();
});
console.log(r) // ["A", "B", "C"]
// rim()去掉数组array中空的值
// 注:IE9(不包含IE9)以下的版本没有trim()方法
3、数组去重
console.log([...new Set(arr)])
const filter = arr.filter(item=>item >= 3)
console.log(filter)
function arrfun(arrs){
let newArr = []
let obj = {}
for(let i = 0 ; i < arrs.length ; i++){
if(!obj[arrs[i]]){
newArr.push(arrs[i])
obj[arrs[i]] = 1
}else{
obj[arrs[i]] ++
}
}
return newArr
}
console.log(arrfun(arr))
4、数组排序
function sorts(a , b){
// return a - b
return b - a
}
console.log(arr.sort(sorts))
// 定位排序
for(let i = 0 ; i < arr.length ; i++){
for(let j = i + 1 ; j < arr.length ; j++){
if(arr[i] < arr[j]){
let temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
}
console.log(arr)
// 冒泡排序
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
console.log(arr)
// 快速排序
function quick(ary) {
//1.判断传入的数组长度,如果是一个就直接返回
if (ary.length <= 1) {
return ary;
}
//2.如果长度不为1,那么就取数组的中间值
let contentIndex = Math.floor(ary.length / 2);
let contentValue = ary.splice(contentIndex, 1)[0];
//3.先定义左右两个数组,然后让数组中剩余的数与中间数进行比较,比中间数小的放到左边的数组,比中间数大的放到右边的数组。
let leftArr = [];
let rightArr = [];
for (let i = 0; i < ary.length; i++) {
let item = ary[i];
item > contentValue ? rightArr.push(item) : leftArr.push(item);
}
//4.使用递归的方式让左右两边的数组持续这样处理,直至左右两边的数组都排好序,最后三者进行拼接
return quick(leftArr).concat(contentValue, quick(rightArr));
}
arr = quick(arr);
console.log(arr);
5、数组扁平化
function flatten(arr) {
return arr.flat(Infinity);
}
console.log(flatten(arr));
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
console.log(flatten(arrs));
function flatArray(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatArray(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
console.log(flatArray(arrs))
6、找最大值最小值
const arr = [1, 2, 3];
Math.max(…arr); // 3
Math.min(…arr); // 1
7、slice()
语法:arr.slice(start , end)
备注:原数组不改变
let arr = [1 , 2 ,3]
let arr1 = arr.slice(1,2)
console.log(arr1 , arr) //[2] , [1 , 2 ,3]
8、splice()
语法:arr.splice(start,deleteCount,item1,item2….)
备注:
- start参数 开始的位置
- deleteCount 要截取的个数
- 后面的items为要添加的元素
- 如果deleteCount为0,则表示不删除元素,从start位置开始添加后面的几个元素到原始的数组里面
- 改变原数组
let arr = [1 , 2 ,3]
let arr1 = arr.splice(0 ,1)
console.log(arr1 , arr) //[1] , [ 2 ,3]
let arr = [1 , 2 ,3]
let arr1 = arr.splice(1 ,0 , 2 , 4 , '5432')
console.log(arr1 , arr) //[0] , [1, 2, 4, '5432', 2, 3]
let arr = [1 , 2 ,3]
let arr1 = arr.splice(1 ,2 , 2 , 4 , '5432')
console.log(arr1 , arr) //[2 , 3] , [1, 2, 4, '5432']
let arr = [1 , 2 ,3]
let arr1 = arr.splice(1)
console.log(arr1 , arr) //[2 , 3] , [1]
9、push() 后增
备注:原数组改变
let arr = [1 , 2 ,3]
let arr1 = arr.push(2 , 4)
console.log(arr1) //5 返回数组长度
console.log(arr) //[1, 2, 3, 2, 4]
10、unshift() 前增
备注:原数组改变
let arr = [1 , 2 ,3]
let arr1 = arr.unshift(2 , 4)
console.log(arr1) //5 返回数组长度
console.log(arr) //[ 2, 4 , 1, 2, 3]
11、pop() 后删
备注:原数组改变
let arr = [1 , 2 ,3 , 12 , 533]
let arr1 = arr.pop()
console.log(arr1) //533 返回删除的那个元素
console.log(arr) //[ 1 , 2 ,3 , 12 ]
12、shift() 前删
备注:原数组改变
let arr = [1 , 2 ,3 , 12 , 533]
let arr1 = arr.shift()
console.log(arr1) //1 返回删除的那个元素
console.log(arr) //[ 2 ,3 , 12 , 533]
12、reverse() 数组翻转
备注:改变原数组不会创建原数组
let arr = [1 , 2 ,3 , 12 , 533]
let arr1 = arr.reverse()
arr1.push('1')
console.log(arr1) // [533, 12, 3, 2, 1, '1']
console.log(arr) //[ 533, 12, 3, 2, 1, '1']
13、toString()
备注:不会改变原数组,返回数组转为字符串并用逗号拼接
let arr = [1 , 2 ,3 , 12 , 533]
let arr1 = arr.toString()
console.log(arr1) // 1,2,3,12,533
console.log(arr) //[ 1 , 2 ,3 , 12 , 533]
14、join()
备注:不会改变原数组,返回数组转为字符串并用逗号拼接
let arr = [1 , 2 ,3 , 12 , 533]
let arr1 = arr.join()
console.log(arr1) // 1,2,3,12,533
console.log(arr) //[ 1 , 2 ,3 , 12 , 533]
let arr = ['1' , '2']
let arr1 = arr.join('+')
console.log(arr1) // 1+2
console.log(arr) // ['1' , '2']
15、indexOf()
//判断数组中是否包含某个元素
let arr = [1,2,3,4,5,4,3,2,1];
console.log(arr.indexOf(1)); // 0
console.log(arr.indexOf(1,1)); // 8
console.log(arr.indexOf(9)); // -1
//判断字符串中是否包含某个字符的情景中:
var str = "Hello world! wo shi oll"
console.log(str.indexOf("World") == -1) //true
console.log(str.indexOf("world") == -1) //false
//查找字符串中某一字符从头开始第一次出现的索引
var str = "Hello world!"
console.log(str.indexOf("o")) //4
console.log(str.indexOf("Hello")) //0
console.log(str.indexOf("World")) //-1
console.log(str.indexOf("world")) //6
16、split()
let str = "background - color"
let strs1 = str.split('-')[0]
let strs2 = str.split(' ' , 1)
let strs3 = str.split(' ' , 2)
let strs4 = str.split(' ')
let strs5 = str.split('')
let strs6 = str.split()
console.log(strs1 , str) //background , background - color
console.log(strs2 , str) //['background'] , 'background - color'
console.log(strs3 , str) //['background', '-'] , 'background - color'
console.log(strs4 , str) //['background', '-', 'color'] , 'background - color'
console.log(strs5 , str) // ['b', 'a', 'c', 'k', 'g', 'r', 'o', 'u', 'n', 'd', ' ', '-', ' ', 'c', 'o', 'l', 'o', 'r'] , 'background - color'
console.log(strs6 , str) // ['background - color'] , 'background - color'
17、数组拼接
// concat()方法拼接;
// 不会更改现有数组,而是返回一个新数组。
let a = [1,2,3,4,5,6]
let b = ['喵喵','旺财','大黄']
let c = a.concat(b)
console.log(a)//[1, 2, 3, 4, 5, 6]
console.log(b)//['喵喵','旺财','大黄']
console.log(c);//[1,2,3,4,5,6,'喵喵','旺财','大黄']
//循环拼接
let a = [1,2,3,4,5,6]
let b = ['喵喵','旺财','大黄']
for(let i=0;i<b.length;i++){
a.push(b[i])
}
console.log(a);//[1,2,3,4,5,6,'喵喵','旺财','大黄']
//push.apply()方法拼接
//push.apply合并数组是把后一个数组的值依次push进前一个数组,使前一个数组发生改变
let a = [1,2,3,4,5,6]
let b = ['喵喵','旺财','大黄']
a.push.apply(a,b)
console.log(a);//[1,2,3,4,5,6,'喵喵','旺财','大黄']
//es6结构赋值
let a = [1,2,3,4,5,6]
let b = ['喵喵','旺财','大黄']
a.push(...b)
console.log(a);//[1,2,3,4,5,6,'喵喵','旺财','大黄']