JS数组

JS中的数组和其他语言不同的是一个数组可以保存多个类型的值,比如数组中第一个位置保存一个字符类型的值,第二个可以保存数值型的值,第三个则可以保存一个对象。

声明方式:

var color = new Array();

var color = new Array(20); //当只传一个参数的时候,其实是指定数组的长度  

var color = new Array("red","blue","green");

另外数组中的length属性不是只读的,可以通过这个属性设置数组的长度。

例如:

var color = new Array("red","blue","green");

color[color.length]="black"; //在位置3添加一种颜色

color[color.length]="brown";//在位置4添加一种颜色

这样依次在最后的位置添加元素,对于跨长度添加也是可以的,例如在100的位置添加一个元素,但这个区间没有赋值的元素都会为undefined

检测对象是否为数组

if (Array.isArray(value)) {     }

数组的tostring()、valueOf()、join()方法

这些方法会将数组内每项元素用逗号分隔开

color.toString(); //red,blue,green

color.valueOf();//red,blue,green

color.join("|"); //red|blue|green  Join方法,表示用哪种符号分隔数组元素

另外,需要注意如果数组中的元素存在undefined或null时,则上面的方法返回的是空字符串。

Push、pop、shift方法

color.push("white", "org") ;

在数组末尾添加两个元素,push里的数量不固定,可随意,另外这个方法有一个返回值,这个返回值,是数组的length

color.pop();

获取数组的最后一个元素。

color.shift() 

获取第一项,并移除第一项

排序

数组中提供了两个默认的排序方法,分别是reverse()和sort()

var values=[0,1,5,10,15]

reverse()方法是反转数组的顺序,按数组的下标倒序显示。values.reverse() //15,10,5,1,0

sort()方法是将内部的值进行tostring后进行排序。values.sort() //0,1,10,15,5

显然上面的排序是有错误的,因为比较的是字符串类型的所以会认为5比1大。

如果想得到正确的结果,可以向这个方法传递一个比较函数作为参数。

比较函数接收两个参数,如果第一个参数应该位于第二个之前,则返回一个负数,如果相等,则返回0,如果第一个位于第二之后,则返回正数,例如:

  function compare(value1, value2) {

 

                if (value1 < value2) {

                    return -1

                } else if (value1 > value2) {

                    return 1;

                } else {

                    return 0;

                }

            }
values.sort(compare); 

这样就可以正确排序了。如果逆序的话,则适当修改返回值,就可以。

如果只是数值类型的比较,则代码更为简单。

  function compare(value1,value2){

                return value1-value2

            }

concat、slice 方法

concat方法可以进行数组之间的连接,也可添加新元素

var colors = ["red", "green", "blue"];

var colors2 = colors.concat("yellow", ["black", "brown"]); //red,green,blue,yellow,black,brown

slice方法接收两个参数,起始位置和操作的个数,他可以进行删除、插入、替换,slice始终都会返回一个数组,该数组包含从原始数组中删除的项,如果没有任何项,则返回一个空数组。

var colors = ["red", "green", "blue"];

var removed = colors.splice(0, 1); //删除第一项,并red

var removed = colors.splice(1, 0, "yellow", "orange");//从第一个位置插入两项,返回空

var removed = colors.splice(1, 1, "red", "purple"); //删除第二项,插入两项,返回blue

位置方法 indexOf和lastIndexOf

这两个方法都接收两个参数,分别是要查找的项和查找的起点位置。

var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];

numbers.indexOf(4); //返回3

numbers.lastIndexOf(4)  //返回5 从末尾开始查找

如果这两个方法没有找到搜索项,则返回-1。

迭代方法

var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];

every() 如果该函数的每一项都返回true,则返回true

var everyResult = numbers.every(function (item, index, array) {

                return (item > 2);

            }); //返回false

filter() : 返回函数中满足条件的元素组成的数组。

var filterResult = numbers.filter(function (item, index, array) {

                return (item > 2);

            }); // 返回  [3,4,5,4,3]

forEach() : 循环遍历数组,这个方法没有返回值。

numbers.forEach(function (item, index, array) {

                //执行某些操作。

            });

map() : 返回每次调用的结果组成的数组。

var mapResult = numbers.map(function (item, index, array) {

                return (item * 2);

            });  //[2,4,6,8,10,8,6,4,2]

some() : 如果函数中,有任意一项返回true,则返回true

var someResult = number.some(function (item, index, array) {

                return (item > 2);

            }); //true

归并方法

归并方法有reduce()和reduceRight()两个方法,reduce是数组的第一项开始遍历到最后,reduceRight是从最后一项开始,遍历到第一项。

这两个函数分别接受4个参数:前一个值,当前值,项的索引和数组对象。

  var values=[1,2,3,4,5]

  var sum = values.reduce(function (prev, cur, index, array) {

       return prev + cur;

  }); //返回15

 数组去重

Array.prototype.unique = function()
{
    this.sort();
    var re=[this[0]];
    for(var i = 1; i < this.length; i++)
    {
        if( this[i] !== re[re.length-1])
        {
            re.push(this[i]);
        }
    }
    return re;
}

 

posted @ 2016-04-12 10:30  8932809  阅读(500)  评论(0编辑  收藏  举报