js 数组
数组是对象的特殊形式
数组会自动维护length属性
数组的遍历
var o = {a: 'A', b: 'B'}; var keys = Object.keys(o); var values = []; for (var i = 0, len = keys.length; i < len; i++) { var key = keys[i]; values[i] = o[key]; }
// 跳过null、undefined 和 不存在的元素 for (var i = 0; i < a.length; i++) { if (!a[i]) { continue; } } // 跳过Undefined和不存在的元素 for (var i = 0; i < a.length; i++) { if (a[i] === undefined) { continue; } } // 跳过不存在的元素处理存在的undefined元素 for (var i = 0; i < a.length; i++) { if (!(i in a)) { continue; } }
数组添加
push 在数组末尾添加一个或多个元素
arrTmp.push('xxx','yyy')
当在数组尾部压入一个元素和a[a.length]赋值是一样的
unshift()在数组的首部插入一个元素
删除
delete arrTmp[0] 类似于 arrTmp[0] = undefined;
注意,对一个数组元素使用delete不会修改数组的length属性
通过设置数组的length属性一个新的期望值,来删除数组尾部的元素。
pop为push的逆方法,使数组长度减少1,并返回被删除的值
shift为unshift的逆方法,...所有元素下移到比当前索引低1的地方。
数组方法
1.Arry.join()方法将数组中所有元素用分隔符连接成字符串,如果不指定分隔符,默认使用逗号。
var a = [1, 2, 3];
a.join() // '1,2,3'
a.join('-') // '1-2-3'
2.Array.reverse() 将数组中的元素颠倒殊勋,返回逆序的数组。
3.sort() 对数组中元素进行排序,并返回排序后的数组。
为了按照其他方式而非字母表顺序进行数组排序,必须给sort方法传递一个比较函数
var a = [33, 4, 1111, 222]; a.sort(); // 字母表顺序 a.sort(function (a, b) { return a-b; }); // 数值顺序 a.sort(function () { return b-a; }); // 数值大小相反的顺序
4.Array.concat() 方法创建并返回一个新数组,新数组的元素包括调用concat()的原始数组和concat的每个参数。
如果这些参数中的任何一个自身是数组,则链接的是数组的元素,而非数组本身。
var a = [1, 2, 3]; a.concat(4, 5); a.concat([4, 5]); a.concat([4, 5], [6, 7]); a.concat(4, [5, [6, 7]]); // 返回[1, 2, 3, 4, 5, [6, 7]]
5. Array.slice()方法返回指定数组的一个片段或子数组。2个参数分别指定了片段的开始和结束的位置。
返回的数组包含第一个参数指定的位置和所有到但不含第二个参数指定的位置之间的所有数组元素。
var a = [1, 2, 3, 4, 5]; console.log(a.slice(1, -1)); // [2, 3, 4]
6. Array.splice()
在数组中插入或删除元素的通用方法。这个方法会修改调用的数组。
在插入或者删除点之后的数组元素会根据需要增加或减小它们的索引值,因此数组的其他部分让然保持连续。
第一个参数指定了插入和(或)删除的起点位置。
第二个参数指定了应该从数组中删除的元素的个数。如果省略第二个参数,则从起点到数组结尾的所有参数都被删除。
var a = ['a', 'b', 'c', 'd']; a.splice(2); console.log(a); // ["a", "b"] a.splice(2, 1); console.log(a); // ["a", "b", "d"]
7. Array.push() 和 Array.pop()
连用这两个函数,我们可以将数组用作栈来使用。
push返回数组新的长度,pop方法删除最后一个元素,返回删除的值。
修改原数组。
8.unshift() 和 shift()
类似于push 和 pop
unshift的参数是一次性插入的,也就是插入的元素的顺序和它们在参数列表中的顺序一致。
9.toString()
var a = [1, 2, 3, 4, 5]; a = [1, [2, 'c']]; console.log(a.join(',')); // 1,2,c
ECMAScript5中的数组方法
1.forEach()
从头到尾遍历数组
参数1.函数
var data = [1, 2, 3, 4, 5]; var sum = 0; data.forEach(function (v, i, a) { a[i] = v + i; }); console.log(data); // [1, 3, 5, 7, 9]
2.map()
var a = [1, 2, 3, 4, 5]; b = a.map(function (x) { return x * x; }); console.log(b); // [1, 4, 9, 16, 25]
map() 返回的是新数组:不修改调用的数组。而且有返回值。
3.filter()
返回的数组元素时调用的数组的一个子集。
传递的参数(函数)是用来逻辑判定的,该函数返回true或false
如果返回值为true或可以转化为true的值,那么传递给判定函数的元素就是返回值的数组中的一个元素。
a = [5, 4, 3, 2, 1]; smallvalues = a.filter(function (x) { return x < 3; }); // [2, 1] everyother = a.filter(function (x, i) { return i%2 == 0; }); console.log(everyother); // [5, 3, 1]
4 ...
数组类型
如何判定一个未知的对象为数组
在ECMAScript 5 中可以 Array.isArray()
console.log(Array.isArray([])); // true console.log(Array.isArray({})); // false
console.log(typeof ['a', 'b']); // object
typeof并不能判断一个数组,他返回objcet
[] instanceof Array // true ({}) instanceof Array // false
instanceof在多窗体的环境中存在问题
在ECMAScript3中个解决方案是
var isArray = Function.isArray || function (o) { return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]"; }

浙公网安备 33010602011771号