javascript物件基礎(使用物件)---3物件、屬性、方法的高階操作-Arrary
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()