• JavaScript 之 Array 对象


    Array 对象

      之前已经了解了 Array(数组)的定义和基本操作。数组的基本操作

      下面来学习更多的方法。

    检测一个对象是否是数组

    instanceof                   // 看看该变量是否是该对象的实例
    Array.isArray(变量名/参数) // HTML5 中提供的方法,有兼容性问题

      注意:instanceof 用法

    变量名 instanceof 构造函数
    

      instanceof 不仅仅局限于数组,也可以用来检测其他的对象,用法相同。

    输出数组

    toString()                 // 把数组转化为字符串,用逗号分隔每一项
    
    valueOf()                  // 返回数组对象本身

    常用方法

      1、栈操作(先进后出)

    push()                    // 将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
    pop()                     // 去除数组中的最后一项,并返回该元素的值,修改 length 属性 

      2、队列操作(先进先出)

    push()                   // 将一个或多个元素添加到数组的末尾,并返回该数组的长度
    shift()                  // 取出数组中的第一个元素,修改 length 属性
    unshift()                // 在数组最前面插入项,返回数组的长度

      3、排序方法

    reverse()                // 翻转数组
    sort()                   // 默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的

      4、操作方法

    concat(参数)              // 把参数拼接到当前数组
    slice(begin,end)         // 把当前数组中截取一个新的数组,不影响原来的数组(包括 begin,不包括 end)
    splice()                 // 删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。

      5、位置方法

    indexof()                // 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
    lastindexof()            // 返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,

      6、迭代方法(不会修改原数组 HTML5中的方法)

    every()                  // 测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。(若收到一个空数组,此方法在一切情况下都会返回 true。)
    filter()                 // 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
    forEach()                // 对数组的每个元素执行一次提供的函数
    map()                    // 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
    some()                   // 测试是否至少有一个元素可以通过被提供的函数方法。该方法返回一个Boolean类型的值。

      7、连接至字符串方法

    join(参数)                // 将数组的所有元素使用参数连接到一个字符串,若没有参数,使用逗号进行连接

      8、清空数组方法

    arr = [];                // 推荐使用
    
    arr.length = 0;
    
    arr.splice(0,arr.length);
    

     案例:

      1、将一个字符串数组输出为 | 分割的形式。如'a|b|c|d'。使用两种方式实现。

     1 // 方式一
     2   var array = [a,b,c,d,e,f];
     3   console.log(array.join('|'));
     4 // 方式二
     5 function myJoin(array, seperator) {
     6   seperator = seperator || ',';
     7   array = array || [];
     8   if (array.length == 0){
     9     return '';
    10   }
    11   var str = array[0];
    12   for (var i = 1; i < array.length; i++) {
    13     str += seperator + array[i];
    14   }
    15   return str;
    16 }
    17 var array = [6, 3, 5, 6, 7, 8, 0];
    18 console.log(myJoin(array, '-'));

      2、将一个字符串数组的元素的顺序进行翻转。使用两种方式。

     1 // 方式一
     2   var array = ['a','b','c','e','f'];
     3   console.log(array.reverse());
     4 // 方式二
     5 function myReverse(arr) {
     6   if (!arr || arr.length == 0) {
     7     return [];
     8   }
     9   for (var i = 0; i < arr.length / 2; i++) {
    10     var tmp = arr[i];
    11     arr[i] = arr[this.length - i - 1];
    12     arr[arr.length - i - 1] = tmp;
    13   }
    14   return arr;
    15 }
    16 
    17 var array = ['a', 'b', 'c'];
    18 console.log(myReverse(array));

      3、工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除。

     1 // 方式一
     2 var array =  [1500,1200,2000,2100,1800];
     3 var tmpArray = [];
     4 for (var i = 0; i < array.length; i++) {
     5   if(array[i] < 2000) {
     6     tmpArray.push(array[i]);
     7   }
     8 }
     9 console.log(tmpArray);
    10 // 方式二
    11 var array =  [1500, 1200, 2000, 2100, 1800];
    12 array = array.filter(function (item, index) {
    13   if (item < 2000) {
    14     return true;
    15   }
    16   return false;
    17 });
    18 console.log(array);

      4、["c", "a", "z", "a", "x", "a"]找到数组中每一个a出现的位置。

    1 var array =  ['c', 'a', 'z', 'a', 'x', 'a'];
    2 var  index = -1;
    3 do {
    4   index = array.indexOf('a',index + 1);
    5   if (index !== -1){
    6     console.log(index);
    7   }
    8 } while (index > 0);

      5、编写一个方法去掉一个数组的重复元素。

     1 function clear(arr) {
     2       // 1 如何获取数组中每一个元素出现的次数
     3       var o = {}; // 记录数组中元素出现的次数
     4       for (var i = 0; i < arr.length; i++) {
     5         var item = arr[i]; // 数组中的每一个元素
     6         // o[item] = 1;
     7         // 判断o对象是否有当前遍历到的属性
     8         if (o[item]) {
     9           // 如果o[item] 存在,说明次数不为1
    10           o[item]++;
    11         } else {
    12           // 如果o[item] 不存在,说明是第一次出现
    13           o[item] = 1;
    14         }
    15       }
    16       // console.log(o);
    17 
    18       // 2 生成一个新的数组,存储不重复的元素
    19       var newArray = [];
    20       // 遍历对象o中的所有属性
    21       for (var key in o) {
    22         // 判断o对象中当前属性的值是否为 1  如果为1 说明不重复直接放到新数组中
    23         if (o[key] === 1) {
    24           newArray.push(key);
    25         } else {
    26           // o对象中当前属性 次数不为1 ,说明有重复的,如果有重复的话,只存储一次
    27           // 判断当前的newArray数组中是否已经有该元素  
    28           if (newArray.indexOf(key) === -1) {
    29             newArray.push(key);
    30           }
    31         }
    32       }
    33       return newArray;
    34     } 
    35 
    36     var array = ['c', 'a', 'z', 'a', 'x', 'a'];
    37     var newArray = clear(array);
    38     console.log(newArray);

      6、sort排序。

     1 var arr = [25, 10, 108, 18];
     2     // 默认情况下的sort是对字符编码 从小到大排序
     3 arr.sort();
     4 console.log(arr);
     5 
     6 // 除了默认排序外,还可以指定比较器
     7 function compare1(a, b) {
     8   return a - b;
     9 }
    10 function compare2(a, b) {
    11   return b - a;
    12 }
    13 arr.sort(compare1);
    14 arr.sort(compart2);
    15 
    16 // 还可以直接指定比较器
    17 arr.sort(function (a,b) {
    18    return a - b; 
    19 })

      7、模拟 sort 内部实现。

     1 // 对数组排序,从小到大  -- 冒泡排序
     2     function sort(array, fnCompare) {
     3       // 外层循环 控制趟数
     4       for (var i = 0; i < array.length - 1; i++) {
     5         // 假设排好序了
     6         var isSort = true;
     7         // 内层循环 控制比较的次数
     8         for (var j = 0; j < array.length - 1 - i; j++) {
     9 
    10           if (fnCompare(array[j], array[j + 1]) > 0) {
    11             isSort = false;
    12             // 交换位置
    13             var tmp = array[j];
    14             array[j] = array[j + 1];
    15             array[j + 1] = tmp;
    16           }
    17         }
    18         // 判断是否排好了
    19         if (isSort) {
    20           break;
    21         }
    22       }
    23     } 
    24 
    25     var arr = [56, 10, 1, 17];
    26     
    27 
    28     sort(arr, function (a, b) {
    29       return b - a;
    30     })
    31 
    32     console.log(arr);

     

  • 相关阅读:
    [国嵌攻略][097][U-Boot新手入门]
    [国嵌攻略][070-095][Linux编程函数手册]
    自己写的切图工具(转)
    【总结整理】关于切图
    【总结整理】冯诺依曼体系结构
    【总结整理】面试需了解
    【总结整理】如何解决跨域问题
    【总结整理】WebGIS基础
    【总结整理】空间数据库基础
    【总结整理】WMS、WMTS、WFS
  • 原文地址:https://www.cnblogs.com/niujifei/p/11367406.html
Copyright © 2020-2023  润新知