数组方法之满汉全席

795 阅读4分钟

根据红宝书整理

1、检测数组

Array.isArray()

确定某个值到底是不是数组。

var arr = [1,2,3];
console.log(Array.isArray(arr)) //true

2、转换方法

toString()

将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。

var arr = [1,2,3];
console.log(arr.toString());//"1,2,3"

##valueOf() 返回数组本身。

console.log(arr.valueOd());//[1,2,3]

toLocaleString()

将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。

var person1={
            toLocaleString:function(){
                return 'Nikolaos11'
            },
            toString:function(){
                return 'Nicholas22'
            }
        }

        var person2 = {
            toLocaleString:function(){
                return 'Grigorios33'
            },
            toString : function(){
                return 'Greg44'
            }
        }
        var people = [person1,person2];
        alert(people);//Nicholas22,Greg44
        alert(people.toString());//Nicholas22,Greg44
        alert(people.toLocaleString());//Nikolaos11,Greg44

join()

使用不同的分隔符来建构字符串

var arr = [1,2,3];
console.log(arr.join('#');//1#2#3

3、栈方法

push()

把参数添加到末尾

var arr =[];
arr.push(1,2);
console.log(arr)//[1,2]

pop()

移除数组最后一项

var arr =[1,2];
arr.pop(1,2);
console.log(arr)//[1]

4、队列方法

unshift()

在数组前面添加任意项

var arr =['a','b','c'];
arr.unshift('s')
console.log(arr)//['s','a',b','c']

shift()

移除数组前面一项

var arr=['a','b','c'];
arr.shift()
console.log(arr)//['b','c']

5、重排序方法

reverse()

反转数组顺序

var values = [1,2,3,4,5];
values.reverse();
console.log(values);//[5,4,3,2,1]

sort()

升序排列数组 *sort()会调用每个数组的toString(),然后得到字符串比较排序

var values = [0,1,5,10,15];
console.log(values.sort());//[0, 1, 10, 15, 5]

因为字符串比较时,‘10’位于‘5’的前面,所以数组被修改了

解决:sort()传一个比较函数作为参数

var values = [0,1,5,10,15];
function compare(value1,value2){
    if(value1 < value2){
        return -1;
    }else if(value1 > value2){
        return 1;
    }else{
        return 0;
    }
}
values.sort(compare)//[0, 1, 5, 10, 15]

6、操作方法

concat()

将接收到的参数添加到副本数组的末尾

var values = [0,1,5,10,15];
console.log(values.concat('yellow','red'));//[0, 1, 5, 10, 15, "yellow", "red"]

slice()

返回参数制定的所有项

  • 参数是负数,则用数组长度+负数 来确定相应的位置。数组项为5,slice(-2,-1)===slice(3,4)
  • 如果结束位置 < 起始位置,则返回空数组
var values = [0,1,5,10,15];
var colors1 = values.slice(1);
var colors2 = values.slice(1,4);

console.log(colors1);//[1, 5, 10, 15]
console.log(colors2);//[1, 5, 10]

splice()

  • 删除。splice(要删除的第一项的位置,要删除的项数)
var colors=['green','red','pink','blue'];
console.log(colors.splice(1,2));//['red','pink']
console.log(colors)//['green','blue']
  • 插入。splice(起始位置,0,要插入的项)
var colors=['green','red','pink','blue'];
colors.splice(1,0,'yellow')
console.log(colors);//['green','yellow',red','pink','blue']
  • 替换。splice(起始位置,要删除的项数,要插入的项)
var colors=['green','red','pink','blue'];
colors.splice(1,2,'yellow')
console.log(colors);//['green','yellow','blue']

7、位置方法

indexOf(第一个参数在数组的项,从哪里开始查)

从数组开头查,第一个参数在数组的项。如有第二个参数,表示从哪里开始查

var arr = [1,3,4,5,7];
arr.indexOf(4)//2
arr.indexOf(4,1)//2
arr.indexOf(4,2)//2
arr.indexOf(4,3)//-1

lastIndexOf()

从数组末尾查,第一个参数在数组的项。如有第二个参数,表示从哪里开始查

var numbers = [1,2,3,4,5,4,3,2,1];
numbers.indexOf(4,4)//5
numbers,lastIndexOf(4,4)//3  第2个参数从末尾开始查

8、迭代方法

every()

对数组的每一项运行给定函数,每一项都符合条件返回true,有一项不符合或全部不符合返回false

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,arr){
    return (item > 2)
})
console.log(everyResult);// false

filter()

对数组的每一项运行给定函数,返回函数会返回true的项组成的数组

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.filter(function(item,index,arr){
    return (item > 2)
})
console.log(everyResult);// [3,4,5,4,3]

forEach()

对数组的每一项运行给定函数

var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item,index,arr){
    执行操作
})

map()

对数组的每一项运行给定函数,返回函数调用结果的数组

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.map(function(item,index,arr){
    return (item * 2)
})
console.log(everyResult);// [2,4,6,8,10,8,6,4,2]

some()

对数组的每一项运行给定函数,有一项符合条件返回true,

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item,index,arr){
    return (item > 2)
})
console.log(everyResult);// true

9、归并方法

reduce()

从数组的第一项开始,逐步遍历到最后

//求和,第一次,prev=1 cur=2,第二次prev = 3,cur=3;
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(prev,cur,index,array){
  return prev + cur;  
})
console.log(sum);//15

reduceRight()

从数组的最后一项开始,像前遍历到第一项

//求和,第一次,prev=5 cur=4,第二次prev = 9,cur=3;
var arr = [1,2,3,4,5];
var sum = arr.reduce(function(prev,cur,index,array){
  return prev + cur;  
})
console.log(sum);//15