ECMAScript5中数组方法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ECMAScript5中数组方法</title>
</head>
<body>
实体符号:http://www.w3school.com.cn/tags/html_ref_symbols.html</br>
&forall;<br>&#8707;
<script>
// ECMAScript5定义了9个新的数组方法来遍历、过滤、检测、简化和搜索数组。
// 1.forEach()方法从头至尾遍历数组,为每个元素调用指定的函数。传递的函数作为forEach的第一个参数,然后forEach()使用三个参数调用该函数:数组元素、元素的索引和数组本身。如果只关心数组元素的值,可以只编写只有一个参数的函数----额外的参数将忽略。
/*var data = [3,4,5,2,2];
var sum = 0;
data.forEach(function(value){
sum += value;//将每个值累加到sum上
})
console.log(sum);//16
data.forEach(function(v,i,a){
a[i] = v + 1;//每个数组元素的值自加1
})
console.log(data);*/
// 2.map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。与forEach()不同的是有返回值,返回的是新数组,它不修改调用的数组。
/*var a = [2,3,1];
var b = a.map(function(x){
return x*x;
});
console.log(a);
console.log(b)*/
// 3.filter()方法返回的数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的:该函数返回ture或false。调用判定函数就像调用forEach()和map()一样。如果返回值为true或能转化为true的值,那么传递给判定函数的元素就是这个子集的成员,它将被添加到一个作为返回值的数组中。
/*var a = [5,4,3,2,1];
var smallvalues = a.filter(function(x){return x<3});
console.log(smallvalues);//[2, 1]
var everyother = a.filter(function(x,i){
// return x%2 == 0;//[4, 2]
return i%2 == 0;
});
console.log(everyother);//[5, 3, 1]
// 注意:filer()会跳过稀疏数组中缺少的元素吗,它的返回数组总是稠密的,为了压缩稀疏数组的空缺,代码如下:
var sparse = [,,,,3,4,1,undefined,null];
var dense = sparse.filter(function(){
return true;
})
console.log(dense);//[3, 4, 1, undefined, null]
// 甚至,压缩空缺并删除undefined和null元素,可以这样使用filter();
var c = dense.filter(function(x){
return x!==undefined && x!=null;
});
console.log(c);//[3, 4, 1]*/
// 4.every()和some()方法是数组的逻辑判定:它们对数组元素应用指定的函数进行判定,返回true和false。every()方法就像数学中的“针对所有”的量词&forall;some()方法就像数学中的“存在”的量词&#8707;
/*var d = [1,3,5,6,7];
console.log(d.every(function(x){return x<10}));//true
console.log(d.every(function(x){return x%2 === 0}));//false 并不是所有的值都是偶数
console.log(d.some(function(x){return x%2 === 0}));//true含有偶数值
console.log(d.some(isNaN));//false不包含非数值元素。
var e = [2,'d'];
console.log(e.some(isNaN));//true*/
// 5.reduce()和reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。这在数式编程中是常见的操作,也可以称为“注入”和“折叠”。
/*var a = [1,3,4,5,6];
var b = a.reduce(function(x,y){return x+y},0);//数组求和
console.log(b);//19
console.log(a);//[1, 3, 4, 5, 6]
var c = a.reduce(function(x,y){return x*y},1);//数组求积
console.log(c);//360
var d = a.reduce(function(x,y){return (x>y)?x:y;});//求最大值
console.log(d);//6

// reduceRight()的工作原理和reduce()一样,不同的是她按照数组索引从高到底(从右向左)处理数组,而不是从低到高。
var g = [2,2,3];
var big = g.reduceRight(function(accumulator,value){
return Math.pow(accumulator,value);
})
console.log(big);//81

*/
// 6.indexOf()和lastIndexOf()搜索整个数组中具有给定的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1。indexOf()从头至尾搜索,lastIndexOf()则反向搜索。

var e = [0,1,2,2,1];
console.log(e.indexOf(2));//2
console.log(e.lastIndexOf(2));//3
console.log(e.indexOf(5));//-1
// 在数组中查找所有出现的x,并返回一个包含匹配索引的数组。
function findallx(a,x){
var result = [];//将会返回的数组
var len = a.length;//待搜素数组的长度
var pos = 0;//开始搜索的索引位置
while(pos<len){
pos = a.indexOf(x,pos);//搜素
if(pos === -1) break;//未找到,就搜素完成
result.push(pos);//否则,在数组中存储索引
pos = pos + 1;//并从下一个位置开始搜索
}
return result;
}
var arr = [1,4,5,6,1,1,5,1,3,1];
console.log(findallx(arr,1));//[0, 4, 5, 7, 9]


</script>
</body>
</html>

原文地址:https://www.cnblogs.com/studyh5/p/9309906.html