VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > JavaScript >
  • JavaScript教程之js数组定义和方法 (包含ES5新增数组(2)

     ② arr.slice(0)复制原数组,当元素改变不会影响原数组。

  • 把数组作为函数的参数传递:基本数据类型传递值,引用数据类型传递引用(快捷方式)。

     

7. 组排序

  • 冒泡排序法:当前元素与下一元素相比,把最大的逐个往后排列,实现从小到大排列。(如果 当前元素比下一元素大,利用第3个变量暂时储存大值)

     

  • 选择排序法:当前元素分别跟后面的元素对比,把最小的逐个往前排列,实现从小到大排列。

     

  • 快速排序法:

    大致分三步:

    1找基准(一般是以中间项为基准)

    2遍历数组,小于基准的放在left,大于基准的放在right

    3递归

  • Sort排序:默认字符串排序(ascii码),转换成数字排序:往sort中传入一个函数作为 参数。从小到大或从大到小排序。(sort排序后,旧数组也会变成相应的顺序。)

          -------->     

    eg: 一个对象数组,根据数组中的对象的某个属性值进行排序。sort方法的函数参数中返回另一个函数

复制代码
var dataArr = [{name:'xxx',age:12},{name:'yyy',age:32},{name:'zzz',age:25},{name:'aaa',age:6}];
function compareObj(proName){
    return function(a,b){
        console.log(a,b)
        var x = a[proName];
        var y = b[proName];
        return x-y;
    }
 }
 dataArr.sort(compareObj('age'));//根据数组中的对象的age属性排序。
 console.log(dataArr);// 打印值见下图
复制代码

8. ES5新增数组方法(IE9+支持)

(1) 静态方法

Array.isArray();

判断是否为数组,返回布尔值。( typeof()无法区分数组和对象,此方法可以 )

(2) 索引方法:

判断数组中是否存在某个值;

① indexOf():返回要查找数值在数组中的索引值,找不到返回-1

② lastIndexOf():从后面往前找,但索引值不变。

③ indexOf / lastIndexOf(keyword[,startIndex])    【支持它们的浏览器包括 IE9+、Firefox 2+、Safari 3+、Opera 9.5+和 Chrome。】  

       Keyword:要查找的项,

  StartIndex:查找起点索引,为可选参数,默认为1

   

(3) 数组迭代方法(IE9+、Firefox 2+、Safari 3+、Opera 9.5+和 Chrome) 

  ECMAScript 5 为数组定义了 5 个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响 this 的值。
  传入这些方法中的函数会接收三个参数:数组项的值、该项在数组中的位置、数组对象本身。
 

① forEach(fn):用于替代for循环,比for循环简便,但不能随意退出,不能使用break。此方法没有返回值。

   

② map(fn):返回的是一个数量相等的新数组,返回的内容是什么取决于在fn中返回的值。

       适用于数组中的对象,不会改变原数组。

③ filter(fn): 得到执行fn后返回时true对应的数组元素组成的数组,

       利用这个方法对数组元素进行筛选。

   

④ some(fn):如果该函数对任何一项返回ture,则返回ture

       -->用于判断数组是否存在某个属性值/对象等(indexOf有局限性)

       

⑤ every(fn):执行函数时,所以都返回ture,则返回ture

       

(4) 数组归并方法(IE9+、Firefox 3+、Safari 4+、Opera 10.5 和 Chrome)

  reduce()和 reduceRight(),这两个方法都会迭代数组的所有项,然后构建一个最终返回的值。
  其中,reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则相反。
  这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。

  给 reduce()和 reduceRight()的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。
  第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项;

  ① reduce() 只有一个参数:函数

  

   cur的值是从数组的索引1元素开始的。prev第一个值是数组的索引0的元素,而后是上一次的prev+cur的和。

 

  ② reduce()  两个参数:函数,归并初始值;

   

    当设置了初始值,cur的值是从数组的索引0元素开始的。prev第一个值则是初始值,而后是上一次的prev+cur的和。

  ③ reduceRight()和reduce()的作用一样,但是遍历方向相反,不举例了。

  ④ 应用例题,(参考 https://www.jianshu.com/p/2d396b10afe0)

   var str = 'name, age, hair\nMerble, 35, red\nBob, 64, blonde';
   处理str,得到 [["name", "age", "hair"], ["Merble", "35", "red"],["Bob", "64", "blonde"]];

   —》

复制代码
var str = 'name,  age,  hair\nMerble,  35,  red\nBob,  64,  blonde';
var ss = str.split('\n')
//console.log(ss);//["name,  age,  hair", "Merble,  35,  red", "Bob,  64,  blonde"]
var a = ss.reduce(function (prev, cur) {
     prev.push(cur.split(",").map(function (item) {
            return item.trim();//去空格
      }))
      return prev
}, []); //初始值为空数组,值赋给第一个prev。
console.log(a);
复制代码


相关教程