关于数组和字符串的一些常用手段

数组的复制

        /*一,    怎样复制一个数组? 最简单的方法是 循环这个数组, 把每一项都添加到新的数组中. 
                 如果有人给你出这样的题目, 那么这个回答应该不是对方想要的.
                 Array.slice(start, [end]) 
                 slice 方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分。 (同样可用于string类型)
                 参数详解, 
                 start, 从左开始0为起点(非负数). 
                 end,可选,不填写则为数组或者字符串的长度. 正整数,期望截取的长度; 负数.从数组或者字符串末尾开始算期望去掉的长度
        */
        window.onload = function () {
            var source = [4, 5, 6, "ff", new Date()];
            var target = source.slice(0, -3); //期望去掉后面三个元素. 得到 [4,5]
            var target2 = source.slice(0, 3); //[4,5,6]
            log(target.join(',')); log(target2.join(','));
 
            source = "aabbccdd"; 
            target = source.slice(0, -3);//期望去掉后面三个元素. 得到 aabbc
            target2 = source.slice(0, 3);//aab
            log(target); log(target2);
        }

 

去掉数组重复项

//去掉重复项, 这里提供两个方法
            var arr = arr2 = [1, 2, 2, 3, "aa", "aa", "BB"];
            var newarr = [], tempObj = {};
            for (var i = 0; i < arr.length; i++) {
                if (tempObj[arr[i]])
                    continue;
                newarr.push(arr[i]);
                tempObj[arr[i]] = arr[i];
            }
            //使用正则表达式. 先替换掉所有当前元素, 再加上当前元素, 就可以保证当前元素只出现一次
            newarr = arr.join(',')+",";
            for (var i = 0; i < arr2.length; i++) {
                var reg = new RegExp(arr2[i] + ",", "g");
                newarr = newarr.replace(reg, "") + arr2[i] + ",";
            }
            log(newarr.split(','))

 

合并数组(去重复)

//合并数组
            var arr1 = [1, 2, 3]; var arr2 = [3, 4, 5];
            newarr = arr1.join(',') + ",";
            for (var i = 0; i < arr2.length; i++) {
                var reg = new RegExp(arr2[i] + ",", "g");
                newarr = newarr.replace(reg, "") + arr2[i] + ",";
            }
            log(newarr.split(','))

 

伪数组

这里把符合以下条件的对象称为伪数组
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
4, 能通过Array.prototype.slice转换为真正的数组的带有length属性的对象

var earr = { 0: "a", 1: "b", 2: "c", length: 3 };
            //log(earr[1]); b
            for (var i = 0; i < earr.length; i++) {
                //log(earr[i]); a b c
            }
            /*earr的表现和一个 ['a','b','c']数组一样*/
var toArray = function () {
                return [].slice.call(arguments);
            }
            log(toArray(3, 5)); // 3,5
            log(toArray(3, 5).constructor); //Array

常见的伪数组有function的arguments, childNodes, jQuery, 等等.

//把数组转成伪数组
            var arr = [1, 2, 3, "a"];
            var obj = { length: 0 };
            [ ].push.apply(obj, arr)
            for (var i in obj) {
                log(i + " " + obj[i]);
            }

输出: 0 1        1 2       2 3    3 a      length 4

真数组转化为伪数组:

[].push.apply(this,[]);

posted @ 2011-06-09 16:36  MyCoolDog  阅读(466)  评论(0编辑  收藏  举报