1. 程式人生 > >javascript物件基礎(使用物件)---3物件、屬性、方法的高階操作-Arrary

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&&currentValue<=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()