Javascript---Array数组

Array类型


声明数组
    var arr = [1,3,5,7,9]; //字面量不调用Array构造函数
    var arr = new Array(1,3,5);  //包含3项 长3
    var arr = new Array(20);  //长20
    var value = [1,2,];  //IE8- 加上undefined 3项
    var value = [,,,,,]; //IE8-  6项  其它5项
   10 - “2”        8

所有的input 取过来的值 是 字符型。
通过设置length可以删除数组末尾项,也可以方便的在末尾加新项。长度为3的数组直接设置索引为99的项,数组length变为100。

检测数组

value instanceof Array (一个页面包含多个框架)instanceof从一个框架向另一个框架传入数组,两个框架分别有自己的构造函数,此时返回false。要返回true,value必须是一个数组,而且还必须与Array构造函数在同个全局作用域中。出现这个问题的原因是浏览器开始支持原生json对象了。
Array.isArray(value) 没有上面的问题 IE9+ 和其它大多数浏览器
上面两种方法不能完全实现检测功能,可用如下判断:
调用Object原生的toString()方法,都会返回一个[Object NativeConstructorName]格式的字符串。每个类在内部都有一个[[class]]属性,这个属性中就指定了上述字符串中的构造函数名。
Object.prototype.toString.call(value); //[object Array]
var isArray = Object.prototype.toString.call(value) == “[object Array]”;
测试原生函数和正则表达式(假设Object.prototype.toString为未被修改的原生版本)
function isFunction(value) {
//IE以COM形式实现的任何函数,都会返回false ,它们并非原生js函数

return Object.prototype.toString.call(value) == “[object Function]”;
}
function isRegExp(value) {
return Object.prototype.toString.call(value) == “[object RegExp]”;
}

有些js库有:

var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON)
                                                             == “[object JSON]”;

Object的toString()方法不能检测非原生构造函数的构造函数名,因此,开发人员定义的任何函数都返回[object Object]。

1.转换方法

(1)arr.valueof() 返回数组本身
(2)arr.toString() 返回数组中每个值的字符串形式
(3)arr.toLocalString() 调用数组每一项的toLocalString()返回字符串,再加逗号拼接起来。
(4)隐式调用toString() console.log(arr)
<=IE7 用undefined做分隔符

2.栈方法

pop() push()

3.队列方法

shift() unshift()前端加入项 unshift(“111”,”222”); 按照传入顺序整块加到前面。
IE7- unshift()返回值总是undefined而不是新长度

4.重排序
arr.reverse();
arr.sort(compare);
function compare(value1, value2) {      //升序
    if(value1 < value2) {
        return -1;
    } else if(value1 > value2) {
        return 1;
    }else {
        return 0;
    }
}

如果元素是字符串类型,直接arr.sort()可实现排序。

5.操作方法

concat 不影响原始数组 传入数组/单个项,会将每一项分别加入数组
.concat(“111”, [“222”, “333”])
slice 不影响原始数组 截取1到5 (1,5) [0,1,2,3,4,5] -> [1,2,3,4] 前取确定 后索引-1
若传入参数为负数,值变为 索引+数组长度
splice (第一项索引,第二项项个数)
删除 (0,2) 要删除的第一项的位置和要删除的项数
插入 (1, 0, “111”, “222”, “333”, “444”) 当前数组的位置1开始插入后四个项
替换 (2, 1, “111”, “222”) 从位置2替换一个,换成后两个项

6.位置方法

indexOf(4) 得到值为4的项的索引
lastIndexOf(4) 得到值为4的项的索引 (从前数)
indexOf(4, 4) lastIndexOf(4,4) 第二个4的查找结果覆盖第一个4

7.迭代方法

every() 运行函数只要有一项返回false则整体返回false (and)
some() 运行函数任意一项返回true则整体返回true (or)
filter() 返回为true项组成的数组
map() 返回函数调用结果组成的数组 返回新数组
forEach() 只运行给定函数,不返回值

    var num = [1,2,3,4,5,6,7,8,9,10];
    num.forEach(function(data){
        console.log(data, data*data);
    });         //遍历数组每一项
    console.log(num.every(function(data){
        return data > 0;
    }));        //true   (and)
    console.log(num.some(function(data){
        return data > 1;
    }));        //true   (or)
    console.log(num.filter(function(data){
        return data>4;
    }));       //[5, 6, 7, 8, 9, 10]
    console.log(num.map(function(data){
        return data+2;
    }));       //[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
8.归并方法

arr . reduce(function(prev, cur, index, arr){return prev+cur;})
每次执行完后,index++,perv变为前一个返回值,cur为数组中下一个操作数,再回调。
reduceRight() 同上,方向相反

    console.log(num.reduce(function(prev, cur, index, arr){
        return prev + cur;
    }));
    console.log(num.reduceRight(function(prev, cur, index, arr){
        return prev + cur;
    }));
9.把字符串转换为数组
stringObject.split(separator, howmany)   第二个参数可选,指定数组最大长度。
var str = "red,blue,green,yellow";
console.log(str.split(","));   //["red", "blue", "green", "yellow"]
console.log(str.split(",", 2));   //["red", "blue"]
console.log(str.split(/[^,]+/));  //["", ",", ",", ",", ""]   
10.数组转字符串 循环加字符串
11.复制数组

(1)浅复制 复制完仍指向原数组 (直接赋值)
(2)深复制 新声明一个数组,一项一项复制

12.二维数组和多维数组

(1) 初始化方法

    Array.matrix = function(numrows, numcols, initial) {
        var arr = [];
        for (var i=0; i < numrows; i++) {
            var column = [];
            for(var j=0; j < numcols; j++) {
                column[j] = initial;
            }
            arr[i] = column;
        }
        return arr;
    }

(2)var array = [[1,1,1],[2,2,2],[3,3,3]]; 可以这样操作 array[0][2]
(3)数组每项长度不同时的计算

13.对象数组
14.数组中的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值