array类型的方法

var arr1 = [12,454,'dafda','feagfag',23];
var arr2 = [46468,'ffwfe','dafs','dfsfs'];
arr1.indexOf('dafda');   //args:数组里面的值     return:Number下标
arr1.lastIndexOf('dafda');  //args:数组里面的值     return:Number下标
arr1.length; //返回数组的个数。
arr1.join('---');  //连接数组为字符串 返回一个String,"12---454---dafda---feagfag"
arr1.pop();  //删除数组最后一个,返回被删除的项;
arr1.push(12,'djaiji')  //向数组的末尾添加一个或更多元素,并返回新的长度(length。
console.log(arr1);  //return  [12, 454, "dafda", "feagfag", 12, "djaiji"] 说明改变了数组的原始值。
arr1.reverse();  //颠倒数组的顺序
arr1.shift();   //与pop()相对,删除的是第一个数组元素,并返回。
arr1.slice(1,3);  //return Array 选取下标内的数组元素组合成数组,并返回。
arr1.sort();  //数组按照string类型的排序调整顺序。
//    arr1.splice(index要添加的位置,应该删除多少元素,要添加到数组的新元素)   //数组的增、删、改
//    前面两个参数’必需的‘
arr2.splice(1,0,'ddddddd',45454);   //return  被删除的项组成的数组。
console.log(arr2);
arr2.toString(); //将数组转为字符串,用逗号隔开。
arr2.unshift('234');  //可向数组的开头添加一个或更多元素,返回数组的length
arr2.valueOf();
arr2.concat(arr1);  //合并数组。
arr2.constructor;   //return   function Array() { [native code] }返回构造函数
arr2.prototype.tostring = function(){   //重写了toString方法
    alert(1)
}

 完整篇:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>array操作</title>
</head>
<body>
    <script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript">
        var arr = ['red',false,1,5,9,3,6,'blue','green',true,false,5,0,2,5,2];
        //array1.concat(array2,array3,...,arrayX)  该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
        //返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。
        //通过concat复制数组
        var arrConcat = arr.concat([]);
        console.log(arrConcat);   //["red", false, 1, 5, 9, 3, 6, "blue", "green", true, false, 5, 0, 2, 5, 2]
        arrConcat.push('新增1','新增2');
        console.log(arrConcat);
        //["red", false, 1, 5, 9, 3, 6, "blue", "green", true, false, 5, 0, 2, 5, 2, "新增1", "新增2"]
        console.log(arr); //["red", false, 1, 5, 9, 3, 6, "blue", "green", true, false, 5, 0, 2, 5, 2]

        //array.every(function(currentValue,index,arr), thisValue)   IE8及以下不支持  返回一个boolean值。接受一个函数参数。类似与sort方法。但是此参数是必须的。不能没有。
        //every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
        // every() 方法使用指定函数检测数组中的所有元素:
        // 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
        // 如果所有元素都满足条件,则返回 true。
        // 注意: every() 不会对空数组进行检测。
        // 注意: every() 不会改变原始数组。
        function checkArr(arr){
            return arr>2;
        }
        var boolean1 = arr.every(checkArr);
        console.log(boolean1);   //false

        //array.filter(function(currentValue,index,arr), thisValue)   IE8及一下不支持  返回值为一个符合条件的所有元素的新的数组。如果没有匹配的则返回空数字。
        //filter() 不会对空数组进行检测。
        //filter() 不会改变原始数组。
        var arrFilter = arr.filter(checkArr);
        console.log(arrFilter);   //[5, 9, 3, 6, 5, 5]

        //array.indexOf(item,start)   返回指定项在数组中首次出现的位置。返回一个Number值,如果没有搜索到则返回-1。
        //start:可选,从第几项开始查找
        //array.lastIndexOf(item,start)  返回指定项在数组中最后一次出现的位置。
        var numindexOf = arr.indexOf(true,4);
        console.log(numindexOf);   //9
        var numlastIndexOf = arr.lastIndexOf(2);
        console.log(numlastIndexOf);   //15

        //array.map(function(currentValue,index,arr), thisValue)  不改变原始值
        //IE8及以下不支持
        //返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
        //map() 方法按照原始数组元素顺序依次处理元素。
        function arrmap(item){
            return item+10;
        }
        var _arrMap = arr.map(arrmap);
        console.log(_arrMap);//["red10", 10, 11, 15, 19, 13, 16, "blue10", "green10", 11, 10, 15, 10, 12, 15, 12]

        // array.pop()  只能移除最后一个元素,不接受参数。返回删除的项。
        //pop() 方法用于删除数组的最后一个元素并返回删除的元素。
        //注意:此方法改变数组的长度!
        //return 所有类型*
        var arrpop = arr.pop();
        console.log(arr); //["red", false, 1, 5, 9, 3, 6, "blue", "green", true, false, 5, 0, 2, 5]
        console.log(arrpop);  //2

        //array.push(item1, item2, ..., itemX)
        //向数组的后面推入项。改变原始数组。
        // return number   新数组的长度
        var arrpush = arr.push('新增push1','新增push2');
        console.log(arr);
        //["red", false, 1, 5, 9, 3, 6, "blue", "green", true, false, 5, 0, 2, 5, "新增push1", "新增push2"]
        console.log(arrpush);        //17
        //array.reverse()颠倒数组的顺序
        //return 颠倒后的数组,即会改变原来的数组
        arr.reverse();
        console.log(arr);
        //["新增push2", "新增push1", 5, 2, 0, 5, false, true, "green", "blue", 6, 3, 9, 5, 1, false, "red"]

        //array.shift()  改变原来的数组   不接收参数,一次只能删除一个
        //shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
        //return 数组原来的第一个元素的值(移除的元素)
        var arrShift = arr.shift();
        console.log(arrShift);  //'新增push2'
        console.log(arr); //["新增push1", 5, 2, 0, 5, false, true, "green", "blue", 6, 3, 9, 5, 1, false, "red"]

        //array.unshift(item1,item2, ..., itemX) 接收N个参数
        //向数组的开头添加一个或更多元素。
        //return 新的长度
        var numUnshift = arr.unshift('新增unshift1','新增unshift2');
        console.log(numUnshift);  //18
        console.log(arr);
        //["新增unshift1", "新增unshift2", "新增push1", 5, 2, 0, 5, false, true, "green", "blue", 6, 3, 9, 5, 1, false, "red"]

        //slice(start,end) 至少接收一个参数,如果不写第二个参数的话,就是截取到末尾。
        //return array 新的截取的数组, 不改变原来的数组
        var arrSlice = arr.slice(4,10);
        console.log(arr);
//["新增unshift1", "新增unshift2", "新增push1", 5, 2, 0, 5, false, true, "green", "blue", 6, 3, 9, 5, 1, false, "red"]
        console.log(arrSlice);
        //[2, 0, 5, false, true, "green"]

        //array.some(function(currentValue,index,arr),thisValue)
        //some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
        // some() 方法会依次执行数组的每个元素:
        // 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
        // 如果没有满足条件的元素,则返回false。
        // 注意: some() 不会对空数组进行检测。
        // 注意: some() 不会改变原始数组。
        //return 布尔值。如果数组中有元素满足条件返回 true,否则返回 false。
        var blnSome = arr.some(checkArr);
        console.log(blnSome);  //true

        //array.sort(sortfunction)   !!!!!!这种方法会改变原始数组!!!!!!!
        //sort() 方法用于对数组的元素进行排序。
        // 排序顺序可以是字母或数字,并按升序或降序。
        // 默认排序顺序为按字母升序。
        // 注意:当数字是按字母顺序排列时"40"将排在"5"前面。
        // 使用数字排序,你必须通过一个函数作为参数来调用。
        // 函数指定数字是按照升序还是降序排列。
        // return 原来的数组
        var arrsort = [10,4,5,20,16,50];
        console.log(arrsort);  //[10, 4, 5, 20, 16, 50]
        arrsort.sort(function(val1,val2){
            return val1-val2;
        });
        console.log(arrsort);  //[4, 5, 10, 16, 20, 50]

        //array.splice(index,howmany,item1,.....,itemX)  这种方法会改变原始数组!
        //index:从什么位置开始添加删除替换
        //howmany:删除多少个项目
        //item:需要添加的项
        //return 如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
        var arrsplice = arr.splice(2,10,'新增splice');
        console.log(arr);   //["新增unshift1", "新增unshift2", "新增splice", 3, 9, 5, 1, false, "red"]
        console.log(arrsplice); //"新增push1", 5, 2, 0, 5, false, true, "green", "blue", 6]

        //array.toString()  不改变原来的数组
        //return String  数组的所有值用逗号隔开
        var strString = arr.toString();
        console.log(arr);  //["新增unshift1", "新增unshift2", "新增splice", 3, 9, 5, 1, false, "red"]
        console.log(strString);  //"新增unshift1,新增unshift2,新增splice,3,9,5,1,false,red"

        // array.valueOf()
        // valueOf() 方法返回 Array 对象的原始值。
        // 该原始值由 Array 对象派生的所有对象继承。
        // valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。
        // 注意: valueOf() 方法不会改变原数组。
        // return Array    valueOf() 返回数组值
        var arrValueOf = arr.valueOf();
        console.log(arrValueOf);  //["新增unshift1", "新增unshift2", "新增splice", 3, 9, 5, 1, false, "red"]
        console.log(arr); //["新增unshift1", "新增unshift2", "新增splice", 3, 9, 5, 1, false, "red"]


        //扩展Array方法
        $.extend(Array.prototype, function() {
            /**
             * @description 查找某一obj在array中的位置
             */

            function indexOf(obj) {
                var result = -1,
                    length = this.length,
                    i = length - 1;
                for (; i >= 0; i--) {
                    if (this[i] == obj) {
                        result = i;
                        // 如果已找到,则跳出循环
                        break
                    }
                }
                return result
            }

            /**
             * @description 判断数组中是否存在obj
             */

            function contains(obj) {
                return this.indexOf(obj) >= 0
            }

            /**
             * @description 数组末尾添加数组中没有的元素obj
             */

            function append(obj) {
                if (!this.contains(obj)) {
                    this[this.length] = obj
                }
            }

            /**
             * @description 在数组中移除obj
             */

            function remove(obj) {
                var index = this.indexOf(obj);
                return index >= 0 ? this.splice(index, 1) : false;
            }

            /**
             * @description 对Array的每一个元素运行一个函数。
             * @method each
             * @param arr(this) 待处理的数组.
             * @param callback 需要执行的函数,该执行函数可传入两个参数,第一个代表当前对象,第二个为当前对象在数组中的索引
             * @return {void}
             * @example var a = [8,2,3]; a.each(function(o,i){console.log(o);console.info(i)});
             */

            function each(callback) {
                for (var i = 0, len = this.length; i < len; i++) {
                    if (i in this) {
                        callback.call(this, this[i], i);
                    }
                }
            }

            /**
             * @description 从一个数组中取出n个不同的值
             * @param {Array} arr 原始数组
             * @param {Number} 需取出的个数
             * @return {Array} 返回数组中n个不同的随机值组成的数组
             * @example var aaa = ['a', 'b', 'e', 'fs','we']; aaa.randArray(3);
             */

            function randArray(n) {
                var leng = this.length;
                //如果arr中总数量小于等于想取出的数量,直接返回arr
                if (leng <= n) {
                    return this;
                } else {
                    var randArr = [],
                        str = ',';
                    //从0开始,共执行n次
                    while (randArr.length < n) {
                        var rand = FS.getRandom(0, leng - 1);
                        //如果这个随机数没有被取过,将该随机数添加到data数组中,跳出这层循环
                        while (str.indexOf(',' + rand) === -1) {
                            str += rand + ',';
                            randArr.push(this[rand]);
                            break;
                        }
                    }
                    return randArr;
                }
            }

            /**
             * @description 数组去重
             * @return {Array} [description]
             * @example [1, 2, 3, 4, 5, true , false, "a", "bbb", 0, "", 0, 3, 4, 5, 6, 7, true, false, "a", " ", "3", "5", "7"].unique()
             */
            function unique() {
                var _this = this;
                // 先让数组排序
                var _sortArr = _this.sort();

                // 逐个比较左右数据,把重复的删掉
                for (var i = _sortArr.length - 1; i >= 0; i--) {
                    if (_sortArr[i] === _sortArr[i - 1]) {
                        _sortArr.splice(i, 1);
                    }
                }

                // 返回新数组
                return _sortArr;
            }

            return {
                indexOf: indexOf,
                contains: contains,
                append: append,
                remove: remove,
                each: each,
                randArray: randArray,
                unique: unique
            }
        }());
    </script>
</body>
</html>

 

posted @ 2016-01-14 10:42  黑客PK  阅读(407)  评论(0编辑  收藏  举报