js数组考题,题目如上:输入一个有序数组和一个数,若在数组中返回索引,若不在返回应该插入的索引
我的答案如下:
1 var arr = [1,2,4,5,7,9], 2 cId = arr.length / 2,//中间索引 3 cNum = Math.floor(arr[cId]);//中间数 4 var _index = function(a,n){ 5 if(n >= a[a.length -1]){//判断最大值 6 n == a[a.length -1]? a[a.length -1] = n : a[a.length] = n; 7 return a.length - 1; 8 } else if( n <= a[0]){//判断最小值 9 n == a[0]? a[0] = n : a.splice(0,0,n); 10 return 0; 11 } else if(n >= cNum){//中间索引右侧 12 for(var i = cId,l = a.length; i < l; i ++){ 13 if(a[i] == n){ 14 return i; 15 } 16 } 17 } else {//中间索引左侧 18 for(var i = 0,l = cId; i < l; i ++){ 19 if(a[i] == n){ 20 return i; 21 } 22 } 23 } 24 } 25 function findIndex(a,n){// 目标数组 数字 26 var m = _index(a,n); 27 if(m || m === 0){//存在,返回索引 注意0 28 return m; 29 } else { 30 if(n >= cNum){//中间右侧 31 for(var i = cId,l = a.length; i < l; i++){ 32 if(a[i] > n){ 33 a.splice(i,0,n); 34 return i; 35 } 36 } 37 } else { 38 for(var i = 0,l = cId; i < l; i++){ 39 if(a[i] > n){ 40 a.splice(i,0,n); 41 return i; 42 } 43 } 44 } 45 } 46 } 47 var _d = findIndex(arr,2); 48 document.write('索引是' + _d + ',新数组:' + arr);