“万能”的数组
【前面的话】说数组“万能”,可能夸张了一点,但是就个人观点,数组的运用是非常广泛的,这里的广泛当然也包含了在其他语言中的运用。举例说明,在javascript当中,由于字符串的不可变性,在进行字符串拼接等操作中,都极大的消耗了内存,这时候用数组来“装载”字符串,操作简单,又不消耗过多的内存,真可谓是“香饽饽”。下面我总结了数组当中常用的一些操作。
——首先我们来对数组进行简单的介绍:
// var o = { }; // o.c 属性; // o["c"] 键-值 的集合; 字典 // 这两个的效果是一样的 var array = [6,7,5,84,6]; //所有对象,都具有toString和valueOf console.log(array.toString());//toSTring内部就调用join() console.log(array.valueOf());//返回当前数组对象
1、 array.join(); // 将数组元素连接起来以构建一个字符串
1 // 将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现 2 var array = ["刘备","张飞","关羽"]; 3 console.log(array.join("|"));
2、 array.reverse(); // 颠倒数组中元素的顺序
1 // 将一个字符串数组的元素的顺序进行反转。["a","b","c","d]——>["d","c","b","a"] 2 var array = ["a","b","c","d"]; 3 array.reverse(); 4 console.log(array);
3、 array.filter(); // 使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组 //这里涉及到兼容旧环境的问题
1 var array = [1500,1200,2000,2100,1800]; 2 //会把筛选的结果返回一个新数组 3 array = array.filter(function(element,index,thisObj){ 4 //element 数组中的每一个元素 5 //index 索引 6 //thisObj 当前数组对象 7 if (element >= 2000) { 8 return false; 9 } 10 return true; 11 }); 12 console.log(array);
4、 array.indexOf();
array.lastIndexOf();
// ["c","a","z","a","x","a"]找到数组中每一个a出现的位置,找不到返回-1 //indexOf 获取数组中第一个符合条件元素的位置 //lastIndexOf 获取数组中最后一个符合条件的元素的位置 var array = ["a","a","z","a","x","a"]; console.log(array.indexOf("a",2)); console.log(array.lastIndexOf("a")); // var index = -1; do { index = array.indexOf("a", index+1); if (index != -1) { console.log(index); } }while(index != -1);
5、 array.sort();
1 // ["c","a","z","a","x","a"]编写一个方法,求数组中每一个字符出现的次数 2 // 排序 3 var array = [3,6,1,5,10,2]; 4 // array.sort();//如果不传参数,按默认的方式排序,按第一个字符的ascii码排序 5 // console.log(array); 6 7 //如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前; 8 //如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本); 9 //如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。 10 array.sort(function(a,b) { 11 return a - b; 12 }); 13 console.log(array); 14 15 //调用自己模拟的sort 16 //sort(array, function(a,b) { 17 // return -(a - b); 18 //}); 19 //console.log(array);
6、 array.splice(); //插入、删除或替换数组的元素
var a = [1,2,3,4,5,6,7,8] a.splice(4); // 返回 [5,6,7,8]; a is [1,2,3,4] a.splice(1,2); // 返回 [2,3]; a is [1,4] a.splice(1,1); // Netscape/JavaScript 1.2 返回 4 ,应该返回 [4] a.splice(1,0,2,3); // Netscape/JavaScript 1.2 返回 undefined ,应该返回 []
7、 array.slice(); // 从当前数组截取一个新数组
var a = [1,2,3,4,5]; a.slice(0,3); // 返回 [1,2,3] a.slice(3); // 返回 [4,5] a.slice(1,-1); // 返回 [2,3,4] a.slice(-3,-2); // 返回 [3]; IE 4存在的Bug: 返回[1,2,3]
8、 array.forEach(); //遍历数组
// 注意与filter的区别
//这里涉及到兼容旧环境
1 var array = [4,6,7,8,3,46,8]; 2 3 //forEach 遍历数组 4 // array.filter(function (item,index,obj) { 5 // }) 6 7 for(var i = 0; i < array.length ; i++) { 8 var item = array[i]; 9 } 10 11 array.forEach(function (item, index,obj) { 12 console.log(item); 13 console.log(index); 14 console.log(obj); 15 })
【输出】
9、 html5提供的方法:
i)indexOf ; lastIndexOf
ii)filter ; forEach
10、清空数组的三种方式:
var array = [1, 2, 3, 4]; //方式1 array.splice(0,array.length); //删除数组中所有项 //方式2 array.length = 0; //length属性可以赋值,length是只读 //方式3 array = []; // 推荐