重学js-可以操作数组的方法总结及一道经典面试题检验js基础

//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);//见下表

本页面出现次数最多的3个html标签
0span148
1div140
2link121


    
    
    
    
    
    
    
    
    
    

基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值