forEach( )
该方法用于循环数组
使用方式:
arr.forEach(function() , this)
参数:
function: 为数组中每个元素执行的函数,该函数接收三个参数:
第一个参数表示数组中正在处理的当前元素
第二个参数表示组中正在处理的当前元素的索引
第三个参数表示map
方法被调用的数组
this : 可选 传入想执行回调函数的this值(参考对象)
返回值:forEach方法返回值始终是undefined, 返回值return 什么值 都对forEach方法执行结果无影响
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script>
<script type="text/javascript">
// 定义数组
var arr = "abcdefg".split("");
// ES5 提供了循环数组的方法
var result = arr.forEach(function(key,index) {
// console.log(arguments)
// return key
console.log(key , index)
})
// jQuery中遍历 $.each() 和 dom.each()两种
// $.each()和 forEach 函数中参数相反
$.each(arr, function(index, key) {
// console.log(arguments)
console.log(index, key)
})
//dom.each()
//$(selector).each(function(index,element))
</script>
</body>
</html>
map( )
作用:也是用于循环数组,和forEach区别就是它的返回值是有意义的
使用方式:
arrr.map(function( ) , this)
参数:
function:为数组中每个元素执行的函数,该函数接收三个参数:
第一个参数表示数组中正在处理的当前元素
第二个参数表示组中正在处理的当前元素的索引
第三个参数表示map
方法被调用的数组
this : 可选 传入想执行回调函数的this值(参考对象)
返回值:一个新数组,每个元素都是回调函数的结果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 定义数组
var arr = "abcdefg".split("");
// map循环
var result = arr.map(function(key, index, arr) {
// console.log(arguments)
// 我们想要让原数组中的成员分别加1
return key + "1"
})
console.log(result)
// map方法, 也是用来循环数组, 但是返回值有意义, 根据一个数组生成一个新的数组, 循环是次要的
var num_arr = [1, 2, 3, 4, 5, 6, 7]
// 返回成员的倍数
var result1 = num_arr.map(function(key) {
return key * 2
})
console.log(result1)
</script>
</body>
</html>
some( )
some方法测试数组中的某些元素是否通过由提供的函数实现的测试。
用于判断数组中是否有成员满足条件, 只要有一个成员满足条件就会返回true, 都不满足才会返回false。
使用方式:
arr.some(function( ),this)
参数:
function:为数组中每个元素执行的函数,该函数接收三个参数:
第一个参数表示数组中正在处理的当前元素
第二个参数表示组中正在处理的当前元素的索引
第三个参数表示方法被调用的数组
返回值:一般是判断的依据
this : 可选 传入想执行回调函数的this值(参考对象)
返回值:布尔值
some
为数组中的每一个元素执行一次 callback
函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some
将会立即返回 true
。否则,some
返回 false
。callback
只会在那些”有值“的索引上被调用,不会在那些被删除或从来未被赋值的索引上调用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var arr = [1, 2, 3, 4, "a", 5, 6];
// 判断数组中是否有字符串
var result = arr.some(function(key, index, arr) {
return typeof key === "string"
})
console.log(result ? "里面有字符串" : "里面没有字符串")
var arr = [1, 2, 3, 4, 5, 6];
// 判断数组中是否有字符串
var result = arr.some(function(key, index, arr) {
return typeof key === "string"
})
console.log(result ? "里面有字符串" : "里面没有字符串")
</script>
</body>
</html>
every()
every方法测试数组的所有元素是否都通过了指定函数的测试。
判断数组中所有成员是否满足条件, 如果有一个成员不满足条件,就返回false, 都满足条件才会返回true
使用方式:
arr.every(function( ),this)
参数:
function:为数组中每个元素执行的函数,该函数接收三个参数:
第一个参数表示数组中正在处理的当前元素
第二个参数表示组中正在处理的当前元素的索引
第三个参数表示方法被调用的数组
返回值:一般是判断的依据
this : 可选 传入想执行回调函数的this值(参考对象)
返回值:布尔值
every
方法为数组中的每个元素执行一次 callback
函数,直到它找到一个使 callback
返回 false(表示可转换为布尔值 false 的值)的元素。如果发现了一个这样的元素,every
方法将会立即返回 false
。否则,callback
为每一个元素返回 true
,every
就会返回 true
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
var arr = [1, 2, 3, 4, 5, 6];
// 判断数组中是否都是数字
var result = arr.every(function(key, index, arr) {
return typeof key === "number"
})
console.log(result ? "里面都是数字" : "里面不全是数字")
var arr = [1, 2, 3, 4, "a", 5, 6];
// 判断数组中是否都是数字
var result = arr.every(function(key, index, arr) {
return typeof key === "number"
})
console.log(result ? "里面都是数字" : "里面不全是数字")
</script>
</body>
</html>
filter
过滤,filter()方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
使用方式:
arr.filter(function( ),this)
参数:
function:为数组中每个元素执行的函数,该函数接收三个参数:
第一个参数表示数组中正在处理的当前元素
第二个参数表示组中正在处理的当前元素的索引
第三个参数表示方法被调用的数组
返回值:布尔值
注:function用来测试数组的每个元素的函数。调用时使用参数 (element, index, array)。返回true表示保留该元素(通过测试),false则不保留。
this : 可选 传入想执行回调函数的this值(参考对象)
返回值:一个新的通过测试的元素的集合的数组
// 定义数组
var arr = ["a", "b", "c", "d", 1, 2, 3, 4, 5];
var result1 = arr.filter(function(value, index, arr) {
return typeof value === "number"
})
console.log(result1)
fill()
fill方法:填充数组,用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。
使用方式:
arr.fill( value , start , end )
参数:
value:用来填充数组元素的值*(可以接受任何值)。
start:可选,起始索引,默认值为0。
end:可选,终止索引,默认值为 this.length
注意:
具体要填充的元素区间是 [start
, end
) , 一个半开半闭区间.
fill
方法接受三个参数 value
, start
以及 end
. start
和 end
参数是可选的, 其默认值分别为 0
和 this
对象的 length 属性值
.
如果 start
是个负数, 则开始索引会被自动计算成为 length+start, 其中
length
是 this
对象的 length 属性值
. 如果 end
是个负数, 则结束索引会被自动计算成为 length+end
.
返回值:修改后的原数组 (原数组改变)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 通过new Array创建数组
var arr = new Array(5)
console.log(arr)
// 填充数组
// arr.fill(1)
arr.fill(function() {
console.log("success")
})
// 循环数组
arr.forEach(function(key, index, arr) {
console.log(key)
})
</script>
</body>
</html>
reduce()
reduce()
方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。
使用方式:
arr.reduce( callback,intitialValue )
参数:
callback:执行数组中每个值的函数,包含四个参数:
第一个参数:上一次累加的结果 累加器累加回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue
第二个参数:数组中正在处理的元素
第三个参数:数组中正在处理的当前元素的索引。 如果提供了initialValue
,则索引号为0,否则为索引为1。
第四个参数:调用reduce
的数组
intitialValue: 用作第一个调用 callback
的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
返回值:函数累计处理的结果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 定义数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// 求相加的结果
var result = arr.reduce(function(pre, key, index, arr) {
// console.log(arguments)
return pre + key
})
// 输出结果
console.log(result)
</script>
</body>
</html>
reduceRight()
reduceRight()
方法对累加器和数组中的每个元素(从右到左)应用一个函数,将其减少为单个值。
使用方式:
arr.reduceRight( callback,intitialValue )
参数:
callback:执行数组中每个值的函数,包含四个参数:
第一个参数:上一次累加的结果 累加器累加回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue
第二个参数:数组中正在处理的元素
第三个参数:数组中正在处理的当前元素的索引。 如果提供了initialValue
,则索引号为0,否则为索引为1。
第四个参数:调用reduce
的数组
intitialValue: 用作第一个调用 callback
的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
返回值:函数累计处理的结果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 定义数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// 求乘积
var result = arr.reduceRight(function(pre, key, index, arr) {
console.log(arguments)
return pre * key
})
// 输出结果
console.log(result)
</script>
</body>
</html>
indexOf()
indexOf方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
使用方式:
arr.indexOf( searchElement,fromIndex)
参数:
searchElement
要查找的元素
fromIndex
开始查找的位置。如果该索引值大于或等于数组长度,意味着不会在数组里查找,返回-1。如果参数中提供的索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,-2表示从倒数第二个元素开始查找 ,以此类推。 注意:如果参数中提供的索引值是一个负值,并不改变其查找顺序,查找顺序仍然是从前向后查询数组。如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0.
返回值:首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
lastIndexOf()
lastIndexOf方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex
处开始
使用方式:
arr.lastIndexOf( searchElement,fromIndex)
参数:
searchElement
要查找的元素
fromIndex
从此位置开始逆向查找。默认为数组的长度减 1,即整个数组都被查找。如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找。
返回值:数组中最后一个元素的索引,如未找到返回-1
区别数组和类数组对象
① instanceof
② constructor
③ toString()
④ ES 提供的方法 isArray()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<script type="text/javascript">
// 获取所有li
var lis = document.getElementsByTagName("li");
// 定义数组
var arr = [];
// 请问有几种方式来区别类数组和数组?
// typeof 用来判断类型 (是值类型还是引用类型) 返回的是一个字符串
// 第一种方式 instanceof
console.log(arr instanceof Array);
console.log(lis instanceof Array);
// 第二种方式
console.log(arr.constructor === Array)
console.log(lis.constructor === Array)
// 第三种方式
console.log(Object.prototype.toString.call(arr) === "[object Array]")
console.log(Object.prototype.toString.call(lis) === "[object Array]")
// 使用ES5提供的方法
console.log(Array.isArray(arr))
console.log(Array.isArray(lis))
</script>
</body>
</html>