Array---ECMAScropt5新增了9个方法
定位:2个--array.indexOf() 、 array.lastIndexOf()
array.indexOf(searchElement[,fromIndex]);//数组中第一个匹配项的索引,没找到指定值,返回-1
array.lastIndexOf(searchElement[,fromIndex]);//数组中最后一个匹配项的索引,没找到指定值,返回-1
迭代:5个---forEach()、every()、some()、map()、filter()
1. array.forEach(callbackfn[,thisArg]): 为 数组中的每个元素 执行指定操作
例1.1: function callback(value,index,arr){
document.write("value:"+value);
document.write("index:"+index);
document.write("arr:"+arr);
}
var arrs=['a','b','c'];
arrs.forEach(callback)
例1.2forEach()如何使用thisArg参数,该参数指定可对其引用this关键字的对象
var obj={
showResults:funciton(value,index){
var squared=this.calcSquare(value);
document.write("value:"+value);
document.write("index:"+index);
document.write("squared:"+squared);
document.write("<br/>")
},
calcSquare:function(x){return x*x}
};
var numbers=[5,6];
numbers.forEach(obj.showResults,obj);
numbers.forEach(function(value,index){this.showResults(value,index)},obj)
---every(): 确定数组的 所有成员 是否满足指定的测试,全部满足返回true,如果数组没有元素,此方法也将返回true,注意,只要遇到callback为false,就不再继续查询数组元素
function CheckIfEven(value,index,ar){
document.write(value+" ");
if(value%2==0){return true}else{return false}
}
var nums=[2,4,5,6,8];//
if(nums.every(CheckIfEven)){document.write(" 都是偶数");}else{document.write(" 不全为偶数");}//2 4 5不全为偶数
every() thisArg的用法:
var checkNumericRange=function(vaule){
if (typeof value!=='number')
return false
esle
return value>=this.minimum&&value<=this.maximum;
}
var nums=[10,15,19];
var obj={minimum:10,maximum:20}
if (nums.every(checkNumericRange,obj))
document.write("都在指定范围内")
else
.write("部分在指定范围内")
-----some():确定指定的回调函数是否为数组中的任何元素均返回为true,如果找到callback为true立即返回true,如果回调不对任何元素返回true,则结果为false
function CheckIfEven(value,index,ar){
if(value%2==0){return true}
}
var nums=[1,15,4,10,11,22];
var evens=nums.some(CheckIfEven);
if(evens)
document.write("不全是奇数。")
else
document.write("全是奇数。")
----map():对数组的每个元素调用定义的回调函数并返回包含结果的数组,即返回一个新数组,其中每个元素均为关联的原始数组元素的回调函数返回值
var obj={
divisor:10,
remainder:funciton(value){ return value%this.divisor,}
}
var numbers=[6,12,25,30];
var result=numbers.map(obj.remainder,obj);
document.write(result);// 6,2,5,0
map()应用一个非数组类型上,通过动态调用call()
function threeChars(value,index,str){
return str.substring(index-1,index+2)
}
word="Thursday"
var result=[].map.call(word,threeChars);
//或 var result=Array.prototype.map.call(word,threeChars);
document.write(result);//Th,Thu,hur,urs,rsd,sda,day,ay
--filter():返回数组中的满足回调函数中指定的条件的元素
过滤数组中字符串元素
var arr=[5,"element",20,"the",true]
var result=arr.filter(
function(value){ return (typeof value==='string');}
);
document.write(result);// "element","the"
过滤字符串中每个单词的首字母
funciton CheckValue(value,index,ar){
if(index==0) return true
else return ar[index-1]===" "
}
var sentence="We are chinese"
var subset=[].filter.call(sentence,CheckValue);
document.write(subset) // W ,a ,c
汇总:2个 reduce() reduceRight()
array.reduce(callbackfn[,initialValue]):对数组中的所有元素调用指定的回调函数,该回调函数的返回值为累积结果,并且此返回值(累积结果)在下一次调用该回调函数时作为参数,
function callbackfn(previousValue,currentValue,currentIndex,array)//4个参数
如果向reduce()方法提供initialValue参数,则previousValue参数为initianlValue,currentValue参数是数组中第一个元素的值,
如果没有提供initialValue参数,则previousValue参数为数组中第一个元素的值,currentValue参数为数组中第二个元素的值
见例1
例1:将数组值连成字符串用 :: 隔开
funciton appendCurrent(previousValue,currentValue){
return previousValue+"::"+currentValue;
}
var elements=["abc","def",123,456]
var result=elements.reduce(appendCurrent);
document.write(result);//abc::def::123::456
例2:向数组中添加值,currentIndex,array用于回调函数
function addDigitValue(previousValue,currentDigit,currentIndex,array){
var exponent=(array.length-1)-currentIndex;
var digitValue=currentDigit*Math.pow(10,exponent);
return previousValue+digitValue;
}
var digits=[4,1,2,5];
var result=digits.reduce(addDigitValue,0);
document.write(result);//4125
例3获取一个数组,该数组仅包含另一个数组中介于1~10之间的值,提供reduce方法的初始值为一个空数组
function Process(previousArray,currentValue){
var nextArray;
if(currentValue>=1&¤tValue<=10)
nextArray=previousArray.concat(currentValue);
else
nextArray=previousArray;
return nextArray;
}
var numbers=[20,1,-5,6,50,3];
var emptyArray=new Array();
var resultArray=numbers.reduce(Process,emptyArray);
document.write(resultArray);//1,6,3
例4:
funciton appendCurrent(previousValue,currentValue){
return previousValue+"::"+currentValue;
}
var elements=["abc","def",123,456]
var result=elements.reduceRight(appendCurrent);
document.write(result);//456::123::def::abc
Function
function.bind(thisArg[,arg1[,arg2[,argN]]])
String
stringObj.trim()