复习数组做的两道题

复习数组操作push,unshift,pop,shift,splice等操作

1、求一个星期几的前三天和后三天

假定一个正常的周 var arr = [1,2,3,4,5,6,7];

去掉后三天就本身和前三天 所以单独的对后三天操作;让其在后面即可

 1 var date = new Date();
 2 var day = date.getDay();
 3 day = day || (7 - day);
 4 function getWeek(day){
 5     var arr = [1,2,3,4,5,6,7];
 6     var b = day - 4;
 7     // 取后三天
 8     if(b >= 0){
 9         for(var i = 0; i < b;i++){
10             // []
11             arr.push(arr.shift());
12         }
13     }else{
14         for (var i = 0 ; i < -b;i++) {
15             arr.unshift(arr.pop());
16         };
17     }
18     arr.splice(3,1);
19     return arr;
20 }
21 getWeek(6);

 

2、取两个数组的重复项

常规的方法使用两个循环判断即可;

根据数组去重的方法,好处是当多个数组的时候仍然可以快速找出重复项

在原型上扩展一个方法getAnd,用于取出数组中的重复项;

多个数组合并成一个使用即可

Array.prototype.getAnd = function(){
    var len = this.length;
    var result = [];
    for(var i = 0; i < len; i++){
        var obj = this[i];
        for (var j = i+1; j < len;) {
            if(this[j] == obj){
                result = result.concat(this.splice(j,1));            
                break;
            }else{
                j++;
            }
        };
    };
    return result;
}
var arr1 = [1,2,3,5,6,9];
var arr2 = [1,2,3,5,10,11];
console.log(arr1.concat(arr2).getAnd());

这样的效率没有直接循环高,仅提供思路作参考。。

posted on 2013-08-07 22:21  _Novice  阅读(154)  评论(0编辑  收藏  举报