一 字符串对象
规则:字符串所有的属性或方法都不会改变原来的字符串
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);