js数组对象

一 字符串对象

规则:字符串所有的属性或方法都不会改变原来的字符串

var str =
    "dklasdklsahdkl&&jdhkas***dkjaskldjakl!!!djkash1233djkahdk9789789789idui12ABCOOPP3456789dasu***dkasldjal%%djlasdjals97897";
// 对str进行处理,数字在前,字母在后,去掉特殊字符,并且数字和字母不能重复

// 保存数字字符串
var numStr = '';
// 保存字母字符串
var charStr = '';

// a-z  97 -- 122
// A-Z  65 -- 90
// 0-9  48 -- 57

for(var i = 0;i<str.length;i++){
    // 获取当前这个字符串
    var curStr = str[i];
    // 获取当前字符串的ASCII值
    var curCode = str.charCodeAt(i);
    // 判断范围
    // 判断是字母       charStr  这个字符串是否包含  curStr 不包含 返回 -1
    if(((curCode >= 65 && curCode <=90) || (curCode >= 97 && curCode <= 122)) && charStr.indexOf(curStr) == -1){
        // 字符串拼接
        charStr += curStr;
    }

    // 判断数字         numStr 这个字符串是否包含  curStr     不包含 返回 -1
    if(curCode >= 48 && curCode <= 57 && numStr.lastIndexOf(curStr)==-1){
        // 字符串拼接
        numStr += curStr;
    }
}

var resStr = numStr+charStr;
console.log(resStr);

字符串的截取方法:截取到了返回对应字符串,截取不到返回空字符串 ""

  • substring(startIndex,endIndex);

    • 参数

      • startIndex:开始索引

      • endIndex:结束索引 不包含结束索引

        • 规律

      • 从当前索引开始,截取到结束索引,不包含结束索引

      • 不传递参数 startIndex默认值是0 截取到末尾

      • 只传递startIndex,从当前索引开始截取到末尾

      • startIndex为负数:不支持负数索引,会自动变为默认值0 endIndex不能不负

      • 开始索引大于结束索引 内置会自动交换位置

  • substr(startIndex,length);

    • 参数

      • startIndex:开始索引

      • length:截取的个数,截取的长度

    • 规律

      • 从当前索引开始截取length个

      • 不传递参数 startIndex默认值是0 截取到末尾

      • 只传递startIndex,从当前索引开始截取到末尾

      • startIndex支持负数索引最后一项是-1从后往前数,截取规律是不变的从前往后截取 ,length不能为负;

    • slice(startIndex,endIndex);

      • 参数

        • startIndex:开始索引

        • endIndex:结束索引 不包含结束索引

      • 规律

        • 从当前索引开始,截取到结束索引,不包含结束索引

        • 不传递参数 startIndex默认值是0 截取到末尾

        • 只传递startIndex,从当前索引开始截取到末尾

        • startIndex和endIndex都支持负数索引 (最后一项是-1,截取都是从前往后截取),一般我们 startIndex 要小于 endIndex

字符串的方法

  • toUpperCase() / toLowerCase(); 转为大写 / 小写

  • split("分隔符");

    • 作用:对字符串进行分割,将分隔符去掉,将其它项放到数组中

    • 返回值:数组

  • replace(searchStr,replaceStr);

    • 参数:searchStr:查找的字符串 replaceStr:用来替换的字符串

    • 作用:字符串替换 默认只能替换一处

    • trim(); 去除首尾空格 IE8及以下不兼容

.数组对象的创建

存储任意数据的集合

  • 字面量:[]

  • 构造函数:new Array();

    • 不传递参数 返回空数组

    • 传递1个参数 数值 规定数组的长度

    • 传递多个参数 传递具体数据

// push(数据1,...);
// 作用:在数组末尾进行增加
// 参数:可以传递一个也可以传递多个
// 是否改变原数组: 改变
// 返回值:返回增加后数组的长度
var arr1 = [10, 100, 200];
var resArr1 = arr1.push("哈哈", true, 1000);
console.log(resArr1);
console.log(arr1);


// pop();
// 作用:在数组末尾删除一项
// 参数:无
// 是否改变原数组: 改变
// 返回值:返回删除的那一项
var arr2 = [10, 100, 200];
var resArr2 = arr2.pop();
console.log(resArr2);
console.log(arr2);


// unshift(数据1,...);
// 作用:在数组开头进行增加
// 参数:可以传递一个也可以传递多个
// 是否改变原数组: 改变
// 返回值:返回增加后数组的长度
var arr3 = [10, 100, 200];
var resArr3 = arr3.unshift("哈哈", true);
console.log(resArr3);
console.log(arr3);


// shift();
// 作用:在数组开头删除一项
// 参数:无
// 是否改变原数组: 改变
// 返回值:返回删除的那一项
var arr4= [10, 100, 200];
var resArr4 = arr4.shift();
console.log(resArr4);
console.log(arr4);


// splice可以实现数组的增加 删除  修改

// 作用:从当前索引开始删除n项
// 参数:startIndex:开始索引  n:删除的个数   
// 是否改变原数组: 改变 
// 返回值:把删除的每一项以一个新的数组返回,没有删除返回空数组
// splice(startIndex,n);
var test1Arr = [10,20,30,40];
var resTest1Arr = test1Arr.splice(1,2);
console.log(resTest1Arr);
console.log(test1Arr); 


// splice(startIndex,n,content,...);
// content:替换的数据
// 从当前索引开始删除n项用content进行替换
var test2Arr = [10,20,30,40,1000,2000,"哈哈"];
var resTest2Arr = test2Arr.splice(1,3,"呵呵",true,{name:"哈哈"});
console.log(resTest2Arr);
console.log(test2Arr); 


// splice(startIndex,0,content,...);
// 从当前索引开始删除0项用content进行替换   放到开始索引之前
var test3Arr = [10,20,30,40,1000,2000,"哈哈"];
var resTest3Arr = test3Arr.splice(2,0,true,{name:"哈哈"});
console.log(resTest3Arr);
console.log(test3Arr); 

数组对象的方法

  • indexOf(数据,[startIndex]) / lastIndexOf(数据,[startIndex]); 判断当前数组中是否包含这个数据 包含返回首次/最后一次出现的索引 不包含返回-1

    • IE8及以下没有这个方法(不兼容)

    • 原数组不改变

  • join("拼接符");

    • 作用:将数组中每一项数据用拼接符进行拼接返回字符串

    • 原数组不改变

  • slice(startIndex,endIndex);

    • 数组的截取

    • startIndex:开始索引 endIndex:结束索引

    • 原数组不改变

  • concat(数据,...);

    • 将当前数组与数据进行合并

    • 返回值:返回合并后的数组

    • 原数组不改变

  • reverse(); 倒序 翻转

    • 返回值:返回倒序后的数组

    • 改变原数组

数组去重

1.

var arr = [2,4,2,4,2,4];
// 获取当前项
for(var i = 0;i<arr.length;i++){
    // 获取后边的每一项
    for(var j = i+1;j<arr.length;j++){
        // 判断  相等就重复了
        if(arr[i] == arr[j]){
            arr.splice(j,1);
            j--;
        }
    }
}

 2.

/* 
	思想:用数组中当前项 和 后边的每一项进行比较  如果当前项和后边某一项相等 就删除这个一项  数组塌陷   数组中删除某一项   后边每一项往前移动一位索引的值也改变了
*/
var arr = [1, 2, 3, 4, 2, 2, 3, 4, 3, 2, 3, 4];
//获取当前项
for (var i = 0; i < arr.length; i++) {
    //获取后边的每一项
    for (var j = i + 1; j < arr.length; j++) {
        //判断   如果当前项和后边某一项相等 就删除这个一项
        if (arr[i] == arr[j]) {
            arr.splice(j, 1);
            j--;
        }
    }
}
console.log(arr);

数组排序

1.

/* 
    选择排序
    用数组中当前项 和 后边的每一项进行比较   如果说当前项大于后边这一项交换位置
*/
// 获取当前项
for (var i = 0; i < arr.length; i++) {
    // 获取后边的每一项
    for (var j = i + 1; j < arr.length; j++) {
        //如果说当前项大于后边这一项交换位置
        if (arr[i] > arr[j]) {
            // 定义中间变量 
            var temp;
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}
console.log(arr);

2.

/* 
    冒泡排序
    思想:用数组中当前项和后一项进行比较 如果当前项大于后一项就交换位置
*/
var arr = [4, 3, 5, 2, 1];
//第一轮    首先不和自己比   将最大值放到了末尾   4, 3, 5, 2, 1
//第一次  4 > 3: 3, 4, 5, 2, 1
//第二次  4 > 5(不成立): 3, 4, 5, 2, 1
//第三次  5 > 2: 3, 4, 2, 5, 1
//第四次  5 > 1: 3, 4, 2, 1, 5

// 第二轮   首先不和自己比   将第二大的值放到了倒数第二项   3, 4, 2, 1, 5
// 第一次  3 > 4(不成立):  3, 4, 2, 1, 5
// 第二次  4 > 2: 3, 2, 4, 1, 5  
// 第三次  4 > 1: 3, 2, 1, 4, 5

// 第三轮   首先不和自己比     .....            3, 2, 1, 4, 5
// 第一次: 3 > 2: 2, 3, 1, 4, 5
// 第二次   3 > 1: 2, 1, 3, 4, 5


// 第四轮   首先不和自己比      2, 1, 3, 4, 5
// 第一次   2 > 1  1, 2, 3, 4, 5


// i(轮数)  arr.length - 1    j(次数) arr.length - 1 - i;
// 0                          4      arr.length - 1 - 0
// 1                          3      arr.length - 1 - 1
// 2                          2      arr.length - 1 - 2
// 3                          1      arr.length - 1 - 3


// 轮数
for (var i = 0; i < arr.length - 1; i++) {
    // 次数
    for (var j = 0; j < arr.length - 1 - i; j++) {
        // 如果说当前项大于后边这一项交换位置
        if (arr[j] > arr[j + 1]) {
            var temp;
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}
console.log(arr);

数组的排序方法

/* 
    sort();  默认升序
    不传递参数:是按照字符串比较进行排序的 ,只能处理0-9 不能处理多位数
    返回值:排好序数组
    是否改变原数组:改变

*/

var arr1 = [1, 9, 8, 7, 2, 4, 3, 11, 22, 14, 23, 18];
var resArr1 = arr1.sort();
console.log(arr1);
console.log(resArr1);


/* 
    sort(callBack);
    传递参数
    callBack:函数   这个函数 需要定义两个形参   这个函数被sort方法调用的时候会传递实参 实参就是数组当中后一项及前一项  比较根据返回值的正负
     返回值:排好序数组
    是否改变原数组:改变

*/


// 数值排序 
var arr2 = [1, 9, 8, 7, 2, 4, 3, 11, 22, 14, 23, 18];
var resArr2 = arr2.sort(function (a, b) {
    console.log(a, b);
    // return a - b;//升序   根据返回值得正负  a-b 整数  负数  0
    return b - a;//降序
});
console.log(resArr2);
console.log(arr2);


var arr3 = [
    { name: "张三", age: 22, date: "1999/8/15" },
    { name: "李四", age: 21, date: "2000/8/15" },
    { name: "车金恩", age: 20, date: "2001/8/15" },
    { name: "钟桦", age: 23, date: "1998/8/15" },
    { name: "刘天信", age: 23, date: "2000/8/20" }
];

// 按照年龄排序
// var resArr3 = arr3.sort(function(a,b){
//     console.log(a,b);
//     console.log(a.age,b.age);
//     return a.age - b.age; //升序
// });



// 按照出生日期排序
var resArr3 = arr3.sort(function (a, b) {
    // console.log(a,b);
    // console.log(a.date,b.date);
    // return new Date(a.date) - new Date(b.date);
    return new Date(b.date) - new Date(a.date);
});

console.log(resArr3);
console.log(arr3);



console.log(new Date("1999/8/15"));
console.log(new Date("2000/8/15"));
// 日期对象相见  首先会先转为时间戳  然后进行相减  获取到的是毫秒值的差值
console.log(new Date("2000/8/15") - new Date("1999/8/15"));


// 根据名字
/* 
    sort(callBack);
    参数:函数
    callBack:这个函数 需要定义两个形参   这个函数被sort方法调用的时候会传递实参 实参就是数组当中后一项及前一项   根据返回值的比较直  return 字符串.localeCompare(字符串);
    中文:按照拼音  
    英文:按照英文字符表
*/

var resTest = arr3.sort(function (a, b) {
    console.log(a.name, b.name);
    // return a.name.localeCompare(b.name,"zh"); //升序
    // 中文
    return b.name.localeCompare(a.name, "zh"); //降序
    // 英文  不需要zh
});
console.log(resTest);
console.log(arr3);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值