javascript数组之方法(一)

数组的方法居多,今天暂时把所有的方法分为一下的几类,逐一地总结:
对象继承方法、数组转换方法、栈和队列方法、数组排序方法、数组拼接方法、创建子数组方法、数组删改方法、数组位置方法、数组归并方法和数组迭代方法。

1:对象的继承方法

数组是一种特殊的对象,继承了对象的toString(),toLocaleString().valueOf()方法。

1:toString()方法返回的是数组中每个值的字符串形式拼接而成的一个以都好分割的字符串,该方法的返回值与不使用任何参数调用join()方法返回的字符串相同。

[1,2,3].toString();//'1,2,3'
['a','b','c'].toString();//'a,b,c'
[1,[2,'c']].toString();//'1,2,c'

 由于alert()要接收字符串参数,它会在后台调用toString()方法,会得到与toString()方法相同的结果。
 

alert([1,2,3]);//'1,2,3'

toLocaleString()

toLocaleString()是toString()方法的本地化版本,经常返回与toString()方法相同的值,但也不总如此

var person1 = {
    toLocaleString: function(){
        return 'Nikolaos';
    },
    toString: function(){
        return 'Nicholas';
    }
};
var person2 = {
    toLocaleString: function(){
        return 'Grigorios';
    },
    toString: function(){
        return 'Greg';
    }
};
var people = [person1,person2];
console.log(people.toString());//'Nicholas,Greg'
console.log(people.toLocaleString());//'Nikolaos,Grigorios'

  如果数组中的某一项的值是null或者undefined,则该值在toLocaleString()和toString()方法返回的结果中以空字符串表示。
  

var colors = [1,undefined,2,null,3];
console.log(colors.toString());//'1,,2,,3'
console.log(colors.toLocaleString());//'1,,2,,3'

valueOf()

valueOf()方法返回数组对象本身

var a = [1, 2, 3];
console.log(a.valueOf());// [1, 2, 3]
console.log(a.valueOf() instanceof Array);//true

2:数组转换方法

join()

Array.join()方法是String.split()方法的逆向操作,后者是将字符串分割成若干块来创建一个数组,  数组继承的toLocaleString()和toString()方法,在默认情况下都会以逗号分隔的字符形式返回数组项;而join()方法可以使用不同的分隔符来构建这个字符串,join()方法只接收一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串。

如果不给join()传入任何参数的话,默认是以逗号分隔

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

var b = new Array(10);
b.join('-');//'---------',9个连字符组成的字符串

若join的参数是undefined,标准浏览器则是以逗号分割,返回字符串,而IE7浏览器则是以‘undefined’来分割字符返回字符串。

//标准浏览器为'1,2,3';IE7-浏览器为'1undefined2undefined3'
var a = [1,2,3];
console.log(a.join(undefined));

如果数组中的一项值是null或者是undefined,则该值在join方法中以空字符串形式表示。

var colors = [1,undefined,2,null,3];
console.log(colors.join());//'1,,2,,3'

该方法也可以用在类数组上

console.log(Array.prototype.join.call('hello', '-'));// "h-e-l-l-o"
var obj = { 0: 'a', 1: 'b', length: 2 };
console.log(Array.prototype.join.call(obj, '-'));// 'a-b'

若对象没有length属性,就不是类数组,也就不能调用数组的方法

var obj = { 0: 'a', 1: 'b' };
console.log(Array.prototype.join.call(obj, '-'));//''

使用join方法可以创建重复某些字符N次的函数。

function repeatFuc(str,n){
    return new Array(n+1).join(str);
}
console.log(repeatFuc('a',8));//aaaaaaaa

3:栈和队列方法

push()和pop()方法允许将数组当作栈来使用,unshift()和shift()的方法非常类似push()和pop().

栈是一种LIFT(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的元素最早移除,而栈中项的插入(又叫推入)和移除(又叫弹出),发生在一个位置—栈的顶部。

队列数据结构的规则是先进先出FIFO,队列在列表末端添加项,从列表前段移除项,结合shift个push方法,可以像队列一样使用数组。

push()

push()方法可以接受任意数量的参数,把他们逐个添加到数组末尾,并返回数组修改后的长度,所以该数组会改变原来的数组。

var a = [];
console.log(a,a.push(1));//[1] 1
console.log(a,a.push('a'));//[1,'a'] 2
console.log(a,a.push(true, {}));//[1,'a',true,{}] 4
console.log(a,a.push([5,6]));//[1,'a',true,{},[5,6]] 5

如果两个数组需要合并,可以使用apply方法

var a = [1, 2, 3];
var b = [4, 5, 6];
console.log(a,Array.prototype.push.apply(a, b));//[1,2,3,4,5,6] 6

如果使用call方法,则会吧数组b看为一个整体参数。

var a = [1, 2, 3];
var b = [4, 5, 6];
console.log(a,Array.prototype.push.call(a, b));//[1,2,3,[4,5,6]] 4

push方法也可以像对象中添加元素,添加后的对象变成类数组对象,即新加入的元素的键对应数组的索引,并且对象有一个length属性,

var obj = {a: 1};
console.log(obj,[].push.call(obj, 2));// {a:1, 0:2, length: 1}
console.log(obj,[].push.call(obj, [3]));// {a:1, 0:2, 1:[3], length: 2}

猜你喜欢

转载自blog.csdn.net/arthurwanggang/article/details/66968358