JS中的数组

有过开发经验的小伙伴们都知道,在前端开发中,数组是一个频频在舞台上大放光彩的存在,他的使用频率居高不下,他的衍生栈与队列,同样有着十分出色的表现,下面就让我们来看看,数组究竟怎么玩?

创建数组

//使用Array构造函数;
var arr = new Array();
//长度为3的数组
var arr1 = new Array(3);  

//直接向Array构造函数传递数组中应该包含的项
var arr2 = new Array("red", "blue", "green");

//可以省略new操作符
var arr3 = ["red", "blue", "green"];
var arr4 = [];

数组方法

数组(Array)的方法都有哪些?

  • isArray(): 最终确定某个值是不是数组。
  • join():只接受一个参数(用作分隔符的字符串),返回包含分隔符的字符串。
  • push()和pop():push()在数组末尾推进数据,返回length长度;pop()删除数组最末尾的数据,返回被删除的数据;
  • shift() 和unshift():unshift()在数组开头推进数据,返回length长度;shift()删除数组最开头的数据,返回被删除的数据;
  • sort() :对数组进行排序;
  • reverse() : 逆转数组的数据;
  • concat() : 连接两个数组(可用来复制数组)
  • slice():接收1~2个参数,即返回项的起始位置和结束位置,此方法不会影响原始数组;
  • splice() : 删除、插入、替换,如代码所示
        var colors = ["red", "green", "blue"];
        var removed = colors.splice(0,1);//移除第一个
        alert(colors);     //green,blue
        alert(removed);    //剩下的数组

        removed = colors.splice(1, 0, "yellow", "orange");//在位置1的后面插入两个元素
        alert(colors);     //green,yellow,orange,blue
        alert(removed);    //空数组

        removed = colors.splice(1, 1, "red", "purple");//删除一个,插入两个(相当于替换的效果)
        alert(colors);//green,red,purple,orange,blue
        alert(removed);
  • indexOf()和 lastIndexOf():查找元素(要查找的项,查找起点位置的索引),indexOf()从开头查起,lastIndexOf()从末尾查起。
  • forEach():遍历数组中每一个元素。
  • toLocalSreing()、toString()、valueOf():toLocalSreing()与toString()方法类似,只不过把数组转换成本地数组;toString()返回由数组每个字符串形式拼接而成的,一个以逗号分隔的字符串;valueOf()返回数组本身。

    迭代方法:

  • map() :函数运行数组中每一个项,返回每次调用结果组成的数组。
  • filter() :函数运行数组中每一个项,返回每次调用结果为true组成的数组。
  • every() :函数遍历数组中的每个元素,每个元素返回true,方法返回true。
  • some() :函数遍历数组中的每个元素,只要有一个元素返回true,方法返回true。
  • reduce()和 reduceRight() :归并方法,迭代数组中所有项,然后构建一个最终返回的值。

补充:

  1. 利用shift()、push()和unshift()、pop()可对队列完成操作,二者方向相反,操作原理相同。
  2. sort()方法在针对数字进行操作的时候,会转换成字符串,结果会出错,例如下面:
 var values = [0, 1, 5, 10, 15];
 values.sort();
 alert(values);    //0,1,10,15,5

改进方法如下:

//升序排列,如需降序,将return的值对调即可
function compare(value1, value2) {
     if (value1 < value2) {
         return -1;
     } else if (value1 > value2) {
           return 1;
     } else {
         return 0;
     }
}
var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values);    //0,1,5,10,15

关于数组常见操作(附代码):

  • 数组的复制:
var ary = ["red", "blue", "green"];
var ary1 = ary.concat(); // 第一种方法
var ary2 = ary.slice(0);  // 第二种方法
  • 求数组的最大值(或最小值):
var arr = [7,12,6,3,8,34,54,98,51];
//按照forEach()方法遍历,用max不断比较,获取最大值;
var max = 0;
function foreach(vaule,index,arr){
 try{
      if(max<arr[index])  max=arr[index];
}catch(e){
  if(e===foreach.break)    return;
 else throw e;
  }
}
foreach.break=new Error("StopIteration");
}
// 2、 数组排序
arr.sort()[ary.length-1];
// 3、数组排序+截取
arr.sort().splice(-1)[0];
// 4、借用Math最大值方法
Math.max.apply(null,arr);
  • 计算所有数组的值的总和
var arr = [7,12,6,3,8,34,54,98,51];
//1、依旧是遍历,在这里不多写,还有上面列举出的迭代方法
//2、for循环遍历,简单不写。
//3、eval()方法,不推荐使用,问题比较多。
eval(arr.join("+"));
//先定义一个空对象,将字符串中的字符作为对象的属性,就可以统计出次数了。然后找出对象中各个属性的最大值
var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds';
var obj = {};
// 处理字符串字符,给对象做属性用
for(var i=0;i<str.length;i++){
    // 中括号调用,数组是下标,对象是属性,obj.name 和 obj['name']
    if(obj[str.charAt(i)]){
        // 如果对象有这个属性了,就给这个属性值自增1
        obj[str.charAt(i)]++;
    }else{
        // 如果对象没有这个属性,就给这个属性值设为1
        obj[str.charAt(i)] = 1;
    }
}
// 找出对象属性中最多次数
var times = 0;
var value = '';
// for in 是另一种for循环,可以用于遍历对象的属性和方法
for(var i in obj){
    if(obj[i]>times){
        times = obj[i];
        value = i;
    }
}
// 最多次数保存在times中了,字符保存在value中了


//使用正则表达式,匹配字符串,同时计数
var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds';
var obj = {};
str.replace(/(.)\1*/g,function(_,__){
    if(obj[__]){
        obj[__] += _.length;
    }else{
        obj[__] = _.length;
    }
});
var times = 0;
var value = '';
for(var i in obj){
    if(obj[i]>times){
        times = obj[i];
        value = i;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值