js数组方法

01.找处元素item在给定数组arr中的位置

function indexOf1(arr, item) {
    return arr.indexOf(item);
};
function indexOf2(arr,item){
    var index = -1;
    arr.forEach(function (res,index) {
        if(res===item&&index===-1){
             index=i;
        }
    });
    return index;
};
function indexOf3(arr,item) {
    var len = arr.length;
    for(var i = 0;i<len;i++){
         if(arr[i]===item){
               return i;
         }
     }
     return -1;
};

02.计算数组arr中所有元素的和

function sum1 (arr) {
    return arr.reduce(function (p, c, i, a) {
    //1--:34[3,4,5,8]
    //2--:75[3,4,5,8]
    //3--:128[3,4,5,8]
    //p每次计算的结果相当于sum+=c中的sum;
    //而c每次计算的结果相当于sum+=c中的c;
    //i为索引
    return p + c;
    });
};
function sum2 (arr) {
     var s = 0;
     arr.forEach(function (value, index, arr) {
          s += value;
     });
     return s;
};
function sum3 (arr) {
    return eval(arr.join("+"));
};

03.移除数组arr中与item相等的元素,返回新数组

function remove1 (arr, item) {
    //splice(index,howmany,item1...itemx);
    //index:规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
    //howmany:要删除的项目数量。如果设置为 0,则不会删除项目。
    var newArr = arr.splice(0);        
    for (var i = 0; i < newArr.length; i++) {
         if (newArr[i] == item) {
              newArr.splice(i, 1);
              i--;             
         }
    }
    return newArr;
};
function remove2  (arr, item) {
     var newArr = [];
     for (var i = 0; i < arr.length; i++) {
          if (arr[i] == item) {
              newArr.push(arr[i]);
          }
     }
     return newArr;
};
function remove3 (arr, item) {
    return arr.filter(function (val) {
        return val != item;
     });
};

04.移除数组arr中与item相等的元素,返回原数组

//splice(index,len,[item])
var arr1 = ['a', 'b', 'c', 'd'];
//remove--item不设置
arr1.splice(1, 1);
console.log(arr1);//Array [ "a", "c", "d" ]
arr1.splice(1, 2);
console.log(arr1);//Array [ "a" ]
//replace--item为替换值
var arr2 = ['a', 'b', 'c', 'd'];
arr2.splice(1, 1, 'ttt');
console.log(arr2);//Array [ "a", "ttt", "c", "d" ]
arr2.splice(1, 2, 'ddd');
console.log(arr2);//Array [ "a", "ddd", "d" ]
//add--len设置为0,item为添加值

05.在数组arr末尾添加item,返回新数组

//普通迭代拷贝
function append1 (arr,item) {
     var len = arr.length,
     newArr = [];
     for(var i = 0;i < len;i++){
          newArr.push(arr[i]);
     }
     newArr.push(item);
     return newArr;
};
//使用slice浅拷贝+push组合
function append2(arr,item) {
     var newArr = arr.slice(0);//slice(start,end)浅拷贝
     newArr.push(item);
     return newArr;
};
//使用concat将传入的数组或非数组值与原数组合并,组成一个新的数组并返回
function append3(arr,item) {
    return arr.concat(item);
}

06.删除数组arr最后一个元素,返回新数组

//删除数组最后一个元素,返回新数组
function truncate1 (arr) {
     return arr.slice(0,-1);
}
function truncate2(arr){
     var a=[];
     a = arr.slice(0);
     a.pop(arr[arr.length-1]);
};

07.在数组arr开头添加item,返回新数组

function prepend1(arr,item){
    return [item].concat(arr);
}
function prepend2(arr,item) {
    var newArr = [item];
    [].push.apply(newArr,arr);
    return newArr;
}
function prepend3(arr,item) {
     var newArr = arr.slice(0);
     newArr.unshift(item)//等价newArr.splice(0,0,item);
     return newArr;
}

08.删除数组arr第一个元素,返回新数组

function curtail1(arr){
     return arr.slice(1);
}
function curtail2(arr) {
     return arr.filter(function (value,index) {
         return index!==0;
     })
};
function curtail3(arr) {
     var newArr = [];
     [].push.apply(newArr,arr);
     newArr.shift();
     return newArr;
};
function curtail4(arr) {
     var newArr = arr.concat();
     newArr.shift();
     return newArr;
};

09.合并数组,返回新数组

function concat1(arr1,arr2) {
     return arr1.concat(arr2);
};
function concat2(arr1,arr2) {
     var newArr = arr1.slice(0);
     [].push.apply(newArr,arr2);
     return newArr;
};

10.在数组arr的index处添加item,返回新数组

function insert1(arr,item,index){
     return arr.slice(0,index).concat(item,arr.slice(index));
};
function insert2(arr,item,index) {
     var newArr = arr.concat();//等价于 newArr=arr.slice(0)
     newArr.splice(index,0,item);
     return newArr;
};
function insert3(arr,item,index) {
     var newArr = [];
     [].push.apply(newArr,arr);
     newArr.splice(index,0,item);
     return newArr;
};

11.统计数组arr等于item的元素出现的次数

function count1(arr,item) {
    var count = arr.filter(function (a) {
    return a===item;
});
    return count.length;
};
function count2(arr,item) {
    var count = 0;
    arr.map(function (a) {
        if(a===item) count++;
    });
    return count;
};
function count3(arr,item) {
    var count = arr.reduce(function(p,c){
        return c===item?p+1:p;
    },0);
    return count;
};

12.找出数组arr中重复出现过的元素

function duplicates(arr) {
    //a数组存放结果,b数组存放arr中每个元素的个数
    var a=[],b=[];
    for(var i = 0;i<arr.length;i++){
        if(!b[arr[i]]){
            b[arr[i]]=1;
            continue;
        }
        b[arr[i]]++;
    }
    for(var i = 0;i< b.length;i++){
        if(b[i]>1){
            a.push(i);
        }
    }
    return a;
}

本人刚开始学习,有些地方还是不理解,如有错误或建议,请留言!谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值