数组方法总结

上周没事的时候把自己对数组方面的理解做了一下总结,知识点不深,方便以后的查阅。

1.对象继承方法

// 对象继承方法toString() toLocalString() valueOf()
//toString()返回的结果是去掉数组两边的"[" "]",toLocalString()和前者相同,而valueOf()返回的则是数组本身
var arr = [1,2,3]; console.log(arr.toString()) //1,2,3 console.log(arr.toLocaleString()) //1,2,3 console.log(arr.valueOf()) //[1,2,3]

2.数组转换方法

//数组转换方法
var arr = [1,2,3];
console.log(arr.join());//1,2,3
console.log(arr.join(""));//123
console.log(arr.join("-"));//1-2-3
console.log(arr.join(undefined));//1,2,3(如果参数是undefined,标准浏览器返回逗号隔开的内容,ie7返回的是undefined的内容)

3.栈和队列方法

// 栈和队列方法 pop() push() shift() unshift()
// 栈是一种LIFO last-in-first-out 后进先出的数据结构。也就是说最新添加的项最早被移除。
// 队列是一种FIFO first-in-first-out 先进先出。队列在列表的末端添加项,在列表的前端删除项。
// pop() push() shift() unshift() 都会改变数组的长度,因此会改变原始数组。
var a = [];
console.log(a,a.push(1));//[1],1
console.log(a,a.push('wbin'));//[1,'wbin'],2
var d = [];
console.log(d.shift()) //undefined

4.数组排序方法

// 数组排序方法 sort(),reverse()两个方法都会改变原始数组
var arr = [1,2,3,4,5];
console.log(arr.reverse())//数组反转
console.log(arr);//改变了原始数组
// sort() 如果包含undefined,则会把undefined放在最后面
var arr1 = [1,undefined,2,undefined,3];
arr1.sort()
console.log(arr1)//[1,2,3undefined,undefined];
// 数组里面有字符串和数字比较的时候,返回NaN,也就是false.所以会出现在数字前面
var arr2 = ['wbin',3,50,3];
arr2.sort(function(x,y){
    if(x<y){
        return -1
    }else if(x>y){
        return 1
    }else{
        return 0
    }
})
console.log(arr2)

可以利用sort()来随机排序一个数组

function compare(){
    return Math.random() - 0.5;
}
var h = [1,2,3,4,5];
console.log(h.sort(compare));

5.concat()

// concat()方法基于当前数组中的所有项创建一个新数组,先创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。所以,不影响原数组

        // 如果不提供参数,concat()方法返回当前数组的一个浅拷贝。也就是说如果数组成员包括复合类型(比如对象),则新数组拷贝的是该值得引用。
        var i = [1,2];
        var ii = i.concat();
        console.log(i,ii);
        i[0] = 0;
        console.log(i,ii)
        var j = [[1,2]];
        var jj = j.concat();
        console.log(j,jj);
        j[0][0] = "wbin";
        console.log(j,jj)

        var aa = {
            a:11
        }
        var bb = {
            b:22
        }
        var r = Array.prototype.concat.call(aa,bb)
        console.log(r)

6.reduce()

var arr1 = [1,32,3,4,5];
        // 求和
        var sum = arr1.reduce(function(x,y){
              return x+y
        })
        console.log(sum)//45
        // 带有原始数据的求和
        var sum1 = arr1.reduce(function(x,y){
            return x+y
        },-5)
        console.log(sum1)//40
        // 找出长度最长的数组元素
        var arr2 = ['aaa',1,222,3,'wbin'];
        var findLongest = arr2.reduce(function(pre,cur){
            return pre.length > cur.length ? pre :cur
        })
        console.log(findLongest)//wbin
        // 实现二维数组扁平化
        var matrix = [
            [1,2],
            [3,4],
            [5,6]
        ]
        var flatten = matrix.reduce(function(pre,cur){
            return pre.concat(cur)
        })  
        console.log(flatten)//[1,2,3,4,5,6]

7. 数组迭代方法,两个参数,一个是要在每一项上运行的函数和运行该函数的作用域对象

var arr2 = [1,2,3];
        var r2 = arr2.map(function(item,index,arr){
            return item*item
        })
        console.log(r2)//[1,4,9]
        var arr3 = ['a','b','c'];
        var r3 = [1,2].map(function(item,index,arr){
            return this[item]//只能写成这样的格式
        },arr3)
        console.log(r3)//['b','b']
        // 利用map方法获得对象数组中的特性属性值
        let arr4 = [
            {
                name:'qi_tian_da_sheng',
                email:'666@qq.com'
            },
            {
                name:'tian_peng_yuan_shuai',
                email:'888@qq.com'
            },
            {
                name:'wbin',
                email:'8888888@qq.com'
            }
        ]
        var r4 = arr4.map(function(item,index){
            return item.email
        })
        console.log(r4)//['666@qq.com','888@qq.com','8888888@qq.com']
        // 对字符串使用该方法,返回的是一个分开的数组
        var str = "abc";
        var r5 = Array.prototype.map.call(str,function(item,index){
            return item//这里可以写一些方法
        })

8.filter()

1        // filter()会跳过稀疏数组中缺少的元素,它的返回值总是稠密的
2         var arr6 = [1,,2,,,3,,,,,,4];
3         var r6 = arr6.filter(function(){
4             return true
5         })
6         console.log(r6)//[1,2,3,4]

9.some() 和 every()

        // some() 方法对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
        var arr7 = [1,2,3];
        var r7 = arr7.some(function(ele){
            return ele%2 ===0
        })
        console.log(r7)//true
        // 空数组上调用some返回的是false
        console.log([].some(function(){}))//false
        // every()和some相反
 
 
改变原数组的方法有七种
四种栈和队列方法 unshift() shift() pop() push()
两个排序方法 reverse() sort()
一个删除方法 splice()

还遗漏一些其他的方法,以后补充。

原文地址:https://www.cnblogs.com/chinabin1993/p/8045152.html