一、输出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 ) ) ;
三、字符串去重
方法1:es6写法
var str= "abcdabcdaaaabbbbccccdddd" ;
function checkStr ( ) {
var arr= str. split ( "" ) ;
return new Set ( arr) . join ( "" ) ;
}
console. log ( checkStr ( str) ) ;
方法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) ) ;
方法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) ) ;
四、字符串原位翻转
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 ( ) ) ;
七、数组降维
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) ;
八、在一个数组中查找值,返回值对应索引的集合
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) ;
}
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) ) ;
}
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) ;
}
}
十二、数组面试题
题一
var b= [ 1 , 2 , 3 , 4 ] ;
var c= b;
c[ 0 ] = 10 ;
console. log ( b) ;
因为数组是引用类型,所以c的值改变,b的值也随之改变。 那么怎么让b的值不改变呢? 使用数组拼接克隆b数组,那么克隆的数组就到了一个新的引用空间,就不会随之改变了。
var b= [ 1 , 2 , 3 , 4 ] ;
var h= b. concat ( ) ;
var c= h;
h[ 0 ] = 10 ;
console. log ( b) ;
题二
已知后端返回一个对象数组,格式类似这样: 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" ) ;
console. log ( "a" < "a" ) ;
console. log ( "a" < "ab" ) ;
console. log ( "ab" < "ac" ) ;
console. log ( "abc" < "b" ) ;
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) ;
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) ;