判断数组是否为数组
1、instanceof
if(value instanceof Array) { }
这种方法存在的问题是:假定单一的全局执行环境。如果网页中包含多个框架,存在两个以上的不同全局执行环境,那么存在两个以上的不同版本的Array构造函数。
如果从一个框架像另一个框架传入数组,那么传入的数组与在第二个框架中元素构建的数组分别具有不同的构造函数。
2、isArray
if(Array.isArray(value)){}
这是instanceof缺陷的解决方案,兼容性:IE9+, Firefox4+, safari5+, opera10.5+
创建数组
- [e0, e1, e2] 字面量表示法
- new Array(e0, e1, e2) 构造函数-元素列
- new Array(arrayLenght) eg: new Array(3) 构造函数-数组长度
- 正则表达式
toString(), valueOf()
所有对象都有这两个方法。对于数组:
- toString以逗号分隔数组元素为字符串,类似于:array.join();
- valueOf返回的是原数组
数组的常用方法
---------------mutator-----------改变数组自身--------------------
push, pop
后进后出, pop返回被删元素,push返回数组长度
unshif, shift
前进前出, shift返回被删元素,unshift返回数组长度
reverse 根据数组索引排序
根据数组索引,倒序排列
sort 根据数组元素排序 (https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
用法 array.sort(compareFunction);
排序函数compareFunction 如果没指明compareFunction,按照Unicode码排序。
compareFunction(a, b) { //比较函数参数默认为a, b
//返回值小于0, a排到b之前
//返回值等于0, a, b相对位置不变
//返回值大于0, b排到a之前
}
splice 返回被删元素组成的数组
添加或删除数组中的一个或多个元素.
array.splice(index, howMany, [e0, e1, ...]) array.splice(操作位置,删多少, 加的元素)
- 操作位置为负数,从数组尾部开始计算
- 如果不删元素,howMany必须为0
- 加的元素不指定,则不加
var a = [1,2,3,4]; var b = a.splice(1, 2, [7,8]); var c = [1,2,3,4]; var d = c.splice(1, 2, 7,8);
// a: [1, [7,8], 4]
// b, d: [2,3]
// c: [1,7,8,4]
--------------Accessor------------这些过程不改变数组自身-----------
concat 合并数据
array.concat(value1, value2, ..., valueN) valueN可以为单个值,也可以为数组。合并的结果都一样。
合并得到的是一个新数组,原来的数组不变。
var num1 = [1, 2, 3]; var num2 = [4, 5, 6]; var num3 = [7, 8, 9]; // 组成新数组[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原数组 num1, num2, num3 未被修改 var nums = num1.concat(num2, num3);
slice 浅拷贝 shallow copy
array.slice(begin[, end])
把数组中一部分的浅复制(shallow copy)存入一个新的数组对象中,并返回这个新的数组
- 如果省略begin, begin为0
- 如果省略end, end为数组的最后一个元素位置
indexOf
arr.lastIndexOf(searchElement, fromIndex)
- fromIndex默认为第一个元素的位置, 从数组头部开始找
- 严格相等 ===
lastIndexOf
arr.IndexOf(searchElement, fromIndex)
- fromIndex默认为最后一个元素的位置, 从数组末尾开始找
- 严格相等 ===
join
---------------------------迭代------------------------------
- every, forEach, some都是检测数组是否满足某个条件
- filter, map是改变数组元素
every 不会改变原数组
如果数组中每一个元素都满足参数中提供的测试函数,则返回真,如果某个元素不满足,则返回false,立即终止循环。every
遍历的元素范围在第一次调用 callback
之前就已确定了。
arr.every(callback[, thisArg])
callback
被调用时传入三个参数:元素值,元素的索引,原数组。 即:(element, index, array)
forEach
让数组的每一项都执行一次给定的函数 array.forEach(callback[, thisArg])
没有办法中止 forEach 循环。
some
测试数组中的某些元素是否通过了指定函数的测试。
some
为数组中的每一个元素执行一次 callback
函数,直到找到一个使得 callback 返回一个“真值”,则返回真,立即终止循环。
filter
利用所有通过指定函数测试的元素创建一个新的数组,并返回。返回满足条件的元素构成的数组。
filter
为数组中的每个元素调用一次 callback
函数,并利用所有使得 callback
返回“真值”(即可转换为布尔值 true 的值)的元素创建一个新数组。
map
返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。