js数组方法

// 数组常用的方法
console.log('---------------------push() --------------------------')
// 1. push      添加到最后        返回添加后的数组
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push('西瓜')
console.log(fruits) // ["Banana", "Orange", "Apple", "Mango", "西瓜"]
console.log('---------------------unshift() --------------------------')
// 2. unshift   添加到最前面      返回添加后的数组
var fruits2 = ["Banana", "Orange", "Apple", "Mango"];
fruits2.unshift('菠萝','火龙果')
console.log(fruits2)  // ["菠萝", "火龙果", "Banana", "Orange", "Apple", "Mango"]
console.log('---------------------shift() --------------------------')
// 3. shift     删除(从前面)    返回处理后的数组
fruits.shift()
console.log(fruits) // ["Orange", "Apple", "Mango", "西瓜"]
console.log('---------------------pop() --------------------------')
// 4. pop       删除最后一项      返回处理后的数组
fruits.pop()
console.log(fruits)    //["Orange", "Apple", "Mango"]
// 5. reverse   数组翻转          返回处理后的数组
fruits.reverse()
console.log(fruits)  //["Mango", "Apple", "Orange"]
console.log('---------------------join() --------------------------')
// 6. join      数组转化为字符串
var arr=[1,2,3,4,5];
console.log(arr.join('--')); // 1--2--3--4--5 以join内的参数切割数组
console.log(fruits.join()); //  把数组中的所有元素转换为一个字符串:


console.log('---------------------slice() --------------------------')
// 7. slice(start,end)     截取数组 从start(开始) 到end(结束 不包含)
console.log(arr.slice(2,4)); //3 4

// 8. concat   数组合并
console.log('---------------------concat() --------------------------')
var arr1=[1,3,45,66656];
var arr2=["dasdas","asdasd","fvbcvb","vgfdgdg"]
console.log(arr1.concat(arr2))

// 9. splice(开始下标,个数,ele1,ele2....) 剪接数组
console.log('---------------------splice() --------------------------')
// (1).一个参数  从参数位置截取 填写负数类似上面str slice  返回截好的数组 原数组变化

console.log(arr1.splice(1)) // [3, 45, 66656]
console.log(arr1)    //[1]
console.log(arr2.splice(-3))  //  ["asdasd", "fvbcvb", "vgfdgdg"]
// (2).二个参数  截取 (开始位置,个数) 返回截好的数组 原数组变化

var arr3=["第一","第二","第三","第四"];
console.log(arr3.splice(1,3)); // ["第二", "第三", "第四"]
console.log(arr3.length); // 1
var arr4=["1","2","3","4"];
console.log(arr4.splice(0,1));   // arr4.shift() ["1"]
var arr5=["5","6","7","8"];
console.log(arr5.splice(arr5.length-1,1)); //=>arr5.pop()
console.log('arr5的长度:'+arr5.length)   //3
// (3).添加  原数组增加
var arr6=["9","10","11","12"];
console.log(arr6.splice(2,0,13)); // []
console.log(arr6);   //["9","10","11","12"];
// (4).替换
var arr7=["1d","2d","3d","4d"];
console.log(arr7.splice(1,2,'a','b')) // ["2d", "3d"]
console.log(arr7)    //["1d", "a", "b", "4d"]

console.log('---------------------forEach() --------------------------')
// 10. arr.forEach(item,index,array){}   遍历,循环 类似jquery的each
var arr8=["a","b","c","d","e"];
// 其中的item参数是数组中的内容,index为其索引,array表示数组本身
arr8.forEach(function(item,index,array){
    console.log("item是:"+item)
    console.log("index值:"+index)
    console.log("array:"+array)
});
console.log('---------------------map() --------------------------')
// 11. map方法        映射 用法和forEach类似
var men=[
    {'name':1,'age':12},
    {'name':2,'age':22},
    {'name':3,'age':33}
];
age=men.map(function(item){
    return item.name +"----"+ item.age
});
console.log(age)   //1 2 3

console.log('---------------------sort() --------------------------')
// 12. arr.sort  排序
var arr9=[1,2,22,11,33,3,5,4,4];
console.log(arr9.sort()) // [1,11,2,22,3,33,4,5]
// 默认情况下sort方法是按ASCII字母顺序排序的,而非我们认为是按数字大小排序


//数字排序
arr9.sort(function (a,b) {
    return a-b
})
console.log(arr9)   //[1, 2, 3, 4, 4, 5, 11, 22, 33]

var numArr=[2,3,2,4,4,4,5,3333,3333];
numArr.sort();
for(var i=0;i<numArr.length;i++){
    if(numArr[i]==numArr[i+1]){
        numArr.splice(i--,1);
    }

}
console.log(numArr)



console.log('---------------------冒泡排序--------------------------')


function bSort(arr10) {
    var tmp;
    for(var i=0;i<arr10.length-1;i++){
        for(var j=0;j<arr10.length-1-i;j++){
            if(arr10[j]>arr10[j+1]){
                //换位置
                tmp=arr10[j+1];
                arr10[j+1]=arr10[j];
                arr10[j]=tmp;
            }
        }
    }
    return arr10;
}
var arr10=[311,2,556,11,33,22,342,77,92254];
bSort(arr10)
console.log(arr10)   //[2, 11, 22, 33, 77, 311, 342, 556, 92254]

function cSort(arr) {
    var tmp;
    arr.forEach(function (item, i) {
        arr.forEach(function (item, i) {
            if (item > arr[i + 1]) {
                //换位置
                tmp = arr[i + 1];
                arr[i + 1] = arr[i];
                arr[i] = tmp;
            }
        })
    })
    return arr
}
var arr11=[11,2,52256,1,33,22,38842,75557,92254];
cSort(arr11)
console.log(arr11)   // [1, 2, 11, 22, 33, 38842, 52256, 75557, 92254]


// 2)快速排序 二分法,找到中间的数,取出来(新数组),原数组没,每次和此数比较,小的放到左边,大的放到右面
function fastSort(arr) {
    var len=arr.length
    if(len<=1){ return arr}
    var  cIndex=Math.floor(len/2);
    var c=arr.splice(c,1);
    var left=[];
    var right=[];
    arr.forEach(function(item,i){
        if(item<c[0]){
            left.push(item);
        }else {
            right.push(item);
        }
    })
    return fastSort(left).concat(c,fastSort(right));
}

var arr12=[1413,234,52256,6581,34,232,38842,75557,333];
console.log(fastSort(arr12))   // [1, 2, 11, 22, 33, 38842, 52256, 75557, 92254]

console.log('---------------------数组去重--------------------------')
// 数组去重
// 最简单数组去重法   IE8以下不支持数组的indexOf方法
//新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
function uniq(array) {
    var temp = [];  //一个新的临时数组
    for (var i = 0; i < array.length; i++) {
        if (temp.indexOf(array[i]) == -1) {
            temp.push(array[i])
        }
    }
    return temp
}
var arr13=[1,233,333,11,333,233,1]
console.log(uniq(arr13));






//  ES6 Set数组去重
const removeDuplicateItems = arr => [...new Set(arr)];
console.log(removeDuplicateItems([42, 'foo', 42, 'foo', true, true,12312,12312])); // => [42, "foo", true]

// 思路:获取没重复的最右一值放入新数组
/*
* 推荐的方法
*
* 方法的实现代码相当酷炫,
* 实现思路:获取没重复的最右一值放入新数组。
* (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
function  qc(array) {
    var temp=[];
    var index=[];
    var l=array.length;
    for(var i=0; i<l; i++){
        for(var j=i+1;j<l; j++){
            if(array[i]===array[j]){
                i++;
                j=i;
            }
        }
        temp.push(array[i]);
        index.push(i);
    }
    return temp

}
var arr14=[1,88,"ddd","ddd",66,88,1]
console.log(qc(arr14));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值