js数组的相关算法题
2021/10/2 14:40:03
本文主要是介绍js数组的相关算法题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
js数组的相关算法题
- 一、输出1-100之间所有的素数之和
- 二、阶乘算法
- 三、字符串去重
- 方法1:es6写法
- 方法2:数组方法进行去重
- 方法3:使用数组+对象的方法去重
- 四、字符串原位翻转
- 五、查找字符串中元素个数最多的元素,并且输出个数
- 六、数字转化为money的格式
- 七、数组降维
- 八、在一个数组中查找值,返回值对应索引的集合
- 九、寻找两个数组中相同的元素中最小的元素
- 十、给定一个数组,里面任意两个数之和等于一个值,输出可能的几种情况
- 十一、找数组内部缺失值,使得数组值是连续的
- 十二、数组面试题
- 题一
- 题二
- 题三
一、输出1-100之间所有的素数之和
var sum=0; for(var i=2;i<=100;i++){ for(var j=2;j<i;j++){ if(i%j==0){ break; } } if(j>=i){ sum+=i; } } console.log(sum);function allCount(args){ if(typeof args=="number"){ var sum=0; for(var i=0;i<=args;i++){ if(check(i)){ sum+=i; } } return sum; } } function check(num){ if(num>=2){ var bool=true; for (var k = 2; k < num; k++) { if (num % k == 0) { bool = false; break; } } return bool; } } console.log(allCount(100));
二、阶乘算法
function recursive(args){ if(args<=1){ return 1; } return args*recursive(args-1); } console.log(recursive(5));//120
三、字符串去重
方法1:es6写法
var str="abcdabcdaaaabbbbccccdddd"; function checkStr(){ var arr=str.split(""); return new Set(arr).join(""); } console.log(checkStr(str));//abcd
方法2:数组方法进行去重
var str="abcdabcdaaaabbbbccccdddd"; function checkStr(){ var arr=str.split(""); for(var i=0;i<arr.length;i++){ for(var k=i+1;k<arr.length;k++){ if(arr[i]==arr[k]){ arr.splice(k,1); k--; } } } return arr.join(""); } console.log(checkStr(str));//abcd
方法3:使用数组+对象的方法去重
var a=[1,1,2,2,3,4,5,5]; function unique(args){ var item=[]; var obj={}; for(var i=0;i<args.length;i++){ if(!obj[args[i]]){ obj[args[i]]=1; item.push(args[i]); } } return item; } console.log(unique(a));// [1, 2, 3, 4, 5]
四、字符串原位翻转
var str="I am a Student"; var s=str.split(" "); var data= s.map(function(value,index){ return value.split("").reverse().join(""); }) console.log(data);var str="I am a Student"; console.log(str.split("").reverse().join("").split(" ").reverse());
五、查找字符串中元素个数最多的元素,并且输出个数
var str="aabbbccdddddjjjnnmaaa"; function findstr(args){ var arr=args.split(""); var num=0;//记录当前字符为几个 var list=[]; for(var i=0;i<arr.length;i++){ var count=1; for(var k=i+1;k<arr.length;k++){ if(arr[i]===arr[k]){ count++; arr.splice(k,1); k--; } } if(count>num){ num=count; list[0]=[arr[i],num]; } else if(count==num){ list[list.length]=[arr[i],num]; } } return list; } console.log(findstr(str));
六、数字转化为money的格式
var money=10000000000; console.log(money.toLocaleString());//10,000,000,000
七、数组降维
var array=[1,[2,3],[4,5],[[6,7]],[[[[[8]]],[9,10]]],[[[[[11]]]]]]; var info=[]; function arraychange(args){ for(var i=0;i<args.length;i++) { if(Array.isArray(args[i])) { //继续 arraychange(args[i]); } else{ info.push(args[i]); } } } arraychange(array); console.log(info);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
八、在一个数组中查找值,返回值对应索引的集合
var arr=[1,2,3,4,1,2,3,4,1,2,3,4]; var num=4; var list=[]; function checkIndex(array,n){ for(var i=0;i<array.length;i++){ if(array[i]==n){ list.push(i); } } console.log(list);//[3, 7, 11] } checkIndex(arr,num);
九、寻找两个数组中相同的元素中最小的元素
var a=[1,2,3,4,5,6]; var b=[1,3,5,7,9,5,10,7]; function method(arr1,arr2){ var list=[]; for(var i=0;i<arr1.length;i++){ for(var k=0;k<arr2.length;k++){ if(arr1[i]==arr2[k]&&list.indexOf(arr1[i])==-1){ list.push(arr1[i]); } } } console.log(Math.min.apply(null, list));//1 } method(a,b);
十、给定一个数组,里面任意两个数之和等于一个值,输出可能的几种情况
var info=[1,2,3,7,4,5,6,7,7,1,8,9]; var num=8; function Count(array,n){ var list=[]; for(var i=0;i<array.length;i++){ //检测当前值是否已经存在 var ishas=true; list.forEach(function(item){ if(item.indexOf(array[i])!=-1){ ishas = false; return; } }); if(ishas){ var c=n-array[i]; if(array.indexOf(c,i+1)!=-1){ list.push([array[i],c]); } } } console.log(list); } Count(info,num);
十一、找数组内部缺失值,使得数组值是连续的
var arr=[1,3,4,7,2,6,9,5]; var min=Math.min.apply(null,arr); var max=Math.max.apply(null,arr); for(var i =min;i<=max;i++) { if(arr.indexOf(i)==-1){ console.log(i);//8 } }
十二、数组面试题
题一
var b=[1,2,3,4]; var c=b; c[0]=10; console.log(b);//[10, 2, 3, 4]
- 因为数组是引用类型,所以c的值改变,b的值也随之改变。
- 那么怎么让b的值不改变呢?
- 使用数组拼接克隆b数组,那么克隆的数组就到了一个新的引用空间,就不会随之改变了。
var b=[1,2,3,4]; //克隆b数组 var h= b.concat(); var c=h; h[0]=10; console.log(b);// [1, 2, 3, 4]
题二
- 已知后端返回一个对象数组,格式类似这样:
const arr = [
{ id: 1, name: ‘a’, birth: 896630400000 },
{ id: 2, name: ‘b’, birth: 725817600000 },
…,
]- 按要求写代码:
- 按照 name 属性降序排序(字母顺序从大到小)
- 去除 id 属性相同的元素(如出现重复,后出现的覆盖先出现的,不要求保留原始顺序)
- 过滤出所有的95后(birth >= 1995年1月1日)
var arr = [ {id: 1, name: 'a', birth: 896630400000}, {id: 2, name: 'b', birth: 788889700000}, {id: 3, name: 'c', birth:778789600000}, {id: 2, name: 'd', birth: 715817600000}, {id: 2, name: 'e', birth: 725817600000}, {id: 3, name: 'f', birth: 722817600000}, {id: 4, name: 'g', birth: 725817600000}, {id: 5, name: 'h', birth: 625817600000}, {id: 5, name: 'ab', birth: 685817600000}, {id: 6, name: 'bc', birth: 775817600000}, {id: 5, name: 'am', birth: 825817600000}, {id: 7, name: 'am', birth: 825817600000}, {id: 8, name: 'am', birth: 825817600000}, {id: 9, name: 'am', birth: 825817600000} ] //字母比较大小 console.log("a" < "b");//true console.log("a" < "a");//false console.log("a" < "ab");//true console.log("ab" < "ac");//true console.log("abc" < "b");//true arr.sort(function(a1,a2){ if(a1.name>a2.name){ return -1; } else{ return 1; } }) //进行遍历 var list=[]; for(var i=0;i<arr.length;i++){ var index=list.indexOf(arr[i].id); if(index==-1){ list.push(arr[i].id); } else{ arr[index]=arr[i]; arr.splice(i,1); i--; } } console.log(arr); //对整个数据过滤大于1995年1月1日00:00:00 //求出这个时间的总毫秒数 var time=new Date("1995/1/1 00:00:00"); var time95=time.getTime(); console.log(time95); console.log(arr.filter(function (item) { return item.birth > time95; }));
题三
- 有两个数组,数组a是有序的,数组b是乱序的,把b插入a中,插入后的新数组仍然是有序的,怎么样更高效?
var u=[1,2,3,4,5]; var h=[1,3,5,2,4,7,6]; u= u.concat(h).sort(); console.log(u);//[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7]
这篇关于js数组的相关算法题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略