//1, 判断是否为数组 isArray
var arr = [1];
console.log(Array.isArray(arr));//true;
//2, 数组已*拼接 join
var arr = [1,2,3,4,5];
console.log(arr.join('+'));//1+2+3+4+5
//3, 向数组末尾添加元素,返回修改后数组的长度.改变原数组 push
var arr = [1,2,3,4,5];
var len = arr.push(6,7);
console.log(len); // 7
console.log(arr);//[1, 2, 3, 4, 5, 6,7]
//4, 数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项,改变原数组 pop
var arr = [1,2,3,4,5];
var item = arr.pop();
console.log(item); // 5
console.log(arr);//[1, 2, 3, 4]
//5, 删除数组的第一项,返回删除的项 ,改变原数组 shift()
var arr = [1,2,3,4,5];
var item = arr.shift();
console.log(item); // 1
console.log(arr); // [2,3,4,5]
//6, 向数组的开头添加元素,返回修改后的数组长度,改变原数组。unshift();
var arr = [1,2,3,4,5];
var len = arr.unshift(-1,0);
console.log(len); // 7
console.log(arr);// [-1, 0, 1, 2, 3, 4, 5]
//7, 数组排序 sort(); 改变原数组
var arr = [1,6,12,23,3];
var arr1 = [1,6,12,23,3];
console.log(arr.sort());// [1, 12, 23, 3, 6]
console.log(arr); // [1, 12, 23, 3, 6]
// 如果需要按数字大小排序需,传参一个方法
function compare(v1,v2){
if(v1 > v2){
return 1;
}else if(v1 < v2){
return -1;
}else{
return 0;
}
}
console.log(arr1.sort(compare));// [1, 3, 6, 12, 23]
console.log(arr1);// [1, 3, 6, 12, 23]
//8, 反转数组项的顺序 reverse():改变原数组
var arr = [1,6,12,23,3];
console.log(arr.reverse()); //[3, 23, 12, 6, 1]
console.log(arr); //[3, 23, 12, 6, 1](原数组改变)
//9, 数组拼接 concat()。原数组不改变。
var arr = [1,2];
var arr1 = [3,4,'5',6];
var arr2 = arr.concat(arr1);
console.log(arr);//[1, 2]
console.log(arr1);//[3, 4, "5", 6]
console.log(arr2);//[1, 2, 3, 4, "5", 6]
//10, 从数组中选取 从 start 到 end 的元素组合成的新数组。不改变原数组。slice
var arr = [1,3,5,7,9,11];
// 传一个参数,就是从下表为n到length-1
var arr1 = arr.slice(1);
// 传两个正数参数,就是从start到end,但是不包括end。
var arr2 = arr.slice(1,4);
// 如果传参结尾为负数,用end+数组长度来替换,即-2+6 = 4
var arr3 = arr.slice(1,-2); // arr.slice(1,4)
// 如果传参都为为负数,全加长度来替换
var arr4 = arr.slice(-4,-1);// arr.slice(2,5)
console.log(arr); //[1, 3, 5, 7, 9, 11](原数组没变)
console.log(arr1); //[3, 5, 7, 9, 11]
console.log(arr2); //[3, 5, 7]
console.log(arr3); //[3, 5, 7]
console.log(arr4); //[5, 7, 9]
//11, 实现删除、插入和替换 splice() 改变原数组
var arr = [1,3,5,7,9,11];
//删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, arr.splice(0,2)会删除数组中的前两项。
arr.splice(0,2);
console.log(arr);//[5, 7, 9, 11]
//插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:
//起始位置、 0(要删除的项数)和要插入的项。例如,arr.splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
arr.splice(2,0,4,6);
console.log(arr);//[5, 7, 4, 6, 9, 11]
//替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:
//起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。
//例如,arr.splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。
arr.splice (2,1,4,6);
console.log(arr);
//12, 在数组中查找元素 indexOf()和 lastIndexOf();两个参数,第一参数是查找的项,第二个参数查找索引起始位置。
var arr = [1,3,5,7,9,11];
console.log(arr.indexOf(5));// 2
console.log(arr.indexOf(5,3)); // -1
console.log(arr.lastIndexOf(5)); // 2
console.log(arr.lastIndexOf(5,3));//2
console.log(arr.lastIndexOf(11,3));// -1
//13, 循环遍历forEach()
var arr = [1,3,5,7,9,11];
var newArr = [];
arr.forEach(item=>{
newArr.push(item*2);
});
console.log(arr);//[1, 3, 5, 7, 9, 11]
console.log(newArr);//[2, 6, 10, 14, 18, 22]
//14, 对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组 map()
var arr = [1,3,5,7,9,11];
var arr2 = arr.map((item,index)=>{
return item+=2
});
console.log(arr2);//[3, 5, 7, 9, 11, 13]
//15, 过滤 ,数组中的每一项运行给定函数,返回满足过滤条件组成的数组 filter()
var arr = [1,3,5,7,9,11];
var arr2 = arr.filter((item,index)=>{
return item%3 == 0
});
console.log(arr2);//[3, 9]
//16, 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。 every():
var arr = [1,3,5,7,9,11];
var tOrf = arr.every(item=>{
return item > 2
});
var tOrf1 = arr.every(item=>{
return item < 12
});
console.log(tOrf);//false
console.log(tOrf1);// true
//17, 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true .some():
var arr = [1,3,5,7,9,11];
var tOrf = arr.some(item=>{
return item > 10
});
var tOrf1 = arr.some(item=>{
return item < 0
});
console.log(tOrf);// true
console.log(tOrf1);// false
//18, 迭代数组的所有项,然后构建一个最终返回的值。reduce()和 reduceRight()
//两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值
//第一个参数函数的参数为四个:1.必需,初始值, 或者计算结束后的返回值;2.必需,当前元素;3.可选,当前元素的索引;4.可选,当前元素所属的数组对象。
var arr = [1,3,5];
var sum = arr.reduce((total,currentValue,currentIndex,arr)=>{
return total+currentValue
},2);
var sum1 = arr.reduceRight((total,currentValue,currentIndex,arr)=>{
return total+currentValue
},2);
console.log(sum);// 11
console.log(sum1);// 11
//19, 数组展开运算符...
var arr = [2, 3, 4];
var arr2 = [1, ...arr, 5]
console.log(arr);// [2, 3, 4]
console.log(arr2);// [1, 2, 3, 4, 5]
//20, 数组去重 set
var arr = [2, 3, 4, 5, 5, 4, 3, 2, 1];
var arr2 =[...new Set(arr)];
console.log(arr2);//[2, 3, 4, 5, 1]
var arr1 = [
{name:'a',age:1},
{name:'aa',age:2},
{name:'aaa',age:3},
{name:'a',age:1},
{name:'aa',age:2}
];
var obj = {};
var newArr = arr1.reduce((total,current)=>{
obj[current.name]?"":obj[current.name] = true && total.push(current);
return total;
},[]);
console.log(newArr);//[{name:'a',age:1},{name:'aa',age:2},{name:'aaa',age:3}]
//21, 对象遍历
var obj = {name:'kb',age:40,team:'lakers',num:24}
var keyList = Object.keys(obj);
console.log(keyList);//["name", "age", "team", "num"]
//22,一道检验js基础的面试题
//获取一个网站出现所有html标签种类,并打印出出现次数最多的3个
/*
* 1、获取网站所有html元素
* document.getElementsByTagName('*')
* 标签上带有选择器 做以下处理
* 2、获取了所有出现的html标签
* [...document.getElementsByTagName('*')].map(item=>item.nodeName)
* document.getElementsByTagName('*')获取到的是非数组,所以需要...将其转化成数组,再使用map的方法。这就
* 3、计算每个标签出现的次数
* [...document.getElementsByTagName('*')].map(item=>item.nodeName).reduce((obj,el)=>{
obj[el] = obj[el]?obj[el]+1:1
return obj;
},{})
* 4、将对象转换成数组
* var elListArr = Object.entries([...document.getElementsByTagName('*')].map(item=>item.nodeName).reduce((obj,el)=>{
obj[el] = obj[el]?obj[el]+1:1
return obj;
},{}))
* 5、数组排序
* elListArr。sort(a,b=>b[1]-a[1]);
* 6、选取前三个
* iWantList = elListArr.slice(0,3);
* console.table(iWantList);
* */
var elListArr = Object.entries([...document.getElementsByTagName('*')].map(item=>item.nodeName).reduce((obj,el)=>{
obj[el] = obj[el]?obj[el]+1:1
return obj;
},{}));
elListArr.sort((a,b)=>b[1]-a[1]);
var iWantList = elListArr.slice(0,3);
console.table(iWantList);//见下表
0 | span | 148 |
1 | div | 140 |
2 | link | 121 |