js中数组类编程题目

1.编写尽可能简洁的javascript代码,找到在第一个数组array1中出现,而在第二个数组array2中没有出现的数字。

indexof()判断数字是否出现,join()用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。

function findNullofNum(arr1,arr2){
    var str = arr2.join("");
    var result = [];
    for (var i = 0,x = 0;i <arr1.length; i ++){
        if(str.indexOf(arr1[i]) == -1)
            result[x] = arr1[i];
            x ++;
        }
        return result;
    }
    var b = findNullofNum(arr1,arr2);

2.编写函数,用于过滤一个数组内重复的元素,并用这些元素重构一个新的数组,新数组内也不能有重复元素。

var arrNum = [1,4,1,1,3,3,4,6,7,8,3,7,0,11,22,22];

将数组中重复的元素去掉,并将各元素放到新的数组中。原理:将重复的元素替换为空。

var str = arrNum.join(',');
    var newArr = [];
    for(var i = 0;i < arrNum.lenghth;i ++){
        if(str.indexOf(arrNum[i])!= -1){
            newArr[newArr.length] = arr[i];
        }
        while(str.indexOf(arrNum[i])!= -1){
            str = str.replace(arrNum[i], '');
        }
    }

3.现有一个数组(元素为数字,并且有可能重复),请给Array.prototype增加一个方法(方法名自取),该方法能去掉数组中全部最大和最小的数字。
数组最大值

Array.prototype.max = function(){
    return Math.max.apply(null,this);
}

数组最小值

Array.prototype.min = function(){
    return Math.min.apply(null,this);
}

4.给定一个数组实现字符串反转,要求原地实现。
使用循环数组的方法:

var arr = new Array();
function myreverse(arr){
    for(var i =0;i < arr.length/2;i ++){
        var temp = arr[i];//交换变量
        arr[i] = arr[arr.length - i - 1];
        arr[arr.length - i - 1] = temp;
    }
}

5.如何准确判断一个javascript对象是数组?
标准方法:

if(object.prototype.toString.call(a) == '[object Array]'){
    //是数组对象
}

常用方法:

if(a.constructor == Array){
    //是数组对象
}

6.写出一个javascript的函数,实现对一个数组去重的功能。

  • 构建一个新的数组存放结果。
  • for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比。
  • 若结果数组中没有该元素,则存到结果数组中。
Array.prototype.unique1 = function(){
    var res = [this[0]];
    for(var i =1;i < this.length;i ++){
        var repeat = false;
        for(var j = 0;j < res.length;j ++){
            if(this[i] == res[j]){
                repeat = true;
                break;
            }
        }
        if(!repeat){
            res.push(this[i]);
        }
    }
    return res;
}   

7.请写出一个函数,功能是删除数组的指定下标元素。

array.pop();//删除最后一个元素,并返回该元素
array.shift();//删除第一个元素,数组元素位置自动前移,返回被删除的元素
array.splice(start,delCount);//从start的位置开始向后删除delCount个元素
Array.prototype.del = function(index){
    if(isNaN(index)||index >= this.length){
        return false;
    }
    for(var i = 0 ,n = 0;i ++)
        if(this[i]!=this[index]){
            this[n ++] = this[i];
        }
    }
    this.length -= 1;
}

8.请写一个函数removeVoid(arr),删除该数组中值为“null,undefined”的项,返回原数组。

function ClearNullArr(arr){
    for(var i = 0,len = arr.length;i < len;i ++){
        if(!arr[i]||arr[i] == ''||arr[i] == undefined){
            arr.splice(i,1);
            len --;
            i --;
        }
    }
    return arr;
}

9.请给Array本地对象增加一个原型方法,它的用途是删除数组中重复的条目,并将数组返回。

<script type="text/javascript">
    Array.prototype.delrepeat = function(){
        var arr = this;
        var _arr = new Array();
        for(var i in arr){
            if(i == 'delrepeat') continue;
            if(_arr.length == 0) _arr.push(arr[i]);
            for(var j = 0;j <_arr.length;j ++){
                if(arr[i] == _arr[j]){
                    break;
                }
                if(j > _arr.length - 2) _arr.push(arr[i]);
            }
            return _arr;
        }
 </script>

10.用js实现随机选取10~100之间的10个数字,存入一个数组,并排序。

function getRandom(istart,iend){//列出需要被选中的数据
    var a1 = [];
    for(var i = 0;i < 91;i ++){
        a1[i] = i + 10;
    }
    //挑选出随机数据
    var  a2 = [];
    for(var j = 0;j < 10;j ++){
        a2.push(a1.splice(Math.floor(Math.random()*a1.length),1));
a2.sort();
alert(a2);
}
getRandom(10,100);

11.把两个数组合并,并删除第二个元素。

var array1 = ['a','b','c'];
var array2 = ['d','e','f'];
var array3 = array1.concat(array2);
array3.splice(1,1);

12.根据每个元素的i属性,由小到大排序如下数组。

var arr=[{i:5,v:1},{i:2,v:4},{i:3,v:2},{i:1,v:5},{i:4,v:3}];

解析:

arr.sort(function(a,b){
    return a.i-b.i;
    })

对于一个数组,sort()默认按字符编码排序:

var testArray=[3,324,5345,6546,134,5654,665];
testArray.sort();
alert(testArray);

输出结果是:134 3 324 5345 5654 6546 665
现在要让它按照数值大小排序:

var testArray=[3,324,5345,6546,134,5654,665];
testArray.sort(function(a,b){
return a-b;
});
alert(testArray);

这里传递一个比较函数给sort,比较函数的逻辑是:如果两参数的差值小于0,则表示a必须出现在b前面,否则在b后面。
输出结果是:3 134 324 665 5345 5654 6546

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值