1. 截取字符串 slice() ,substring() ,substr()
备注:三种方法都不会改变原来的字符串,而是生成新的字符串。
slice()方法
可提取字符串的某个部分,并以新的字符串返回被提取的部分。
语法:str.slice(start,end),截取str从start到end的所有字符(包含起始位置,不包含结束位置)。
说明:如果参数start与end相等,那么该方法返回的就是一个空字符串。start和end都可以是负数,如果是负数,就从字符串的尾部开始算起,例如-1就是最后一个字符,-2就是倒数第二个字符,依次类推, 如果未指定end参数,则截取从 start 到原字符串结尾的字符串。起始字符要比结束字符小,否则截取不成功
var str = 'abcde leodonna'
console.log(str.slice(1,8))//bcde le
console.log(str.slice(1,-2))//bcde leodon
console.log(str.slice(-4,-1))//onn
console.log(str.slice(8))//odonna
substring()
用于提取字符串中介于两个指定小标之间的字符
语法:str.substring(start,end) 截取str从start到end的所有字符(包含起始位置,但不包含结束位置)。
说明:两个参数都必须是非负整数,如果参数start与end相等,那么该方法返回的就是一个空字符串,如果start比end大,那么该方法在提取字符串之前会先交换这两个参数。如果未指定end参数,则截取从start到原字符串结尾的字符串。
var str = 'abcde leodonna'
console.log(str.substring(1,8))//bcde le
console.log(str.substring(4))//e leodonna
console.log(str.substring(4,1))//bcd
substr()
substr()方法可在字符串中抽取从start下标开始的指定数目的字符串。
语法:str.substr(start,length)截取str从start开始的length个字符(包含起始位置)。
说明:start参数可以是任意整数,如果是负数,则从str的尾部开始算起,例如-1就是str的最后一个字符。length是可选的,如果没有,则表示截取从str开始的位置到字符串的尾部。
var str = 'abcde leodonna'
console.log(str.substr(8))//odonna
console.log(str.substr(-4))//onna
console.log(str.substr(4,4))//e le
console.log(str.substr(-3,6))//nna
2.索引方法 indexOf() , lastIndexOf()
indexOf方法和lastIndexOf()方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置,如果没有找到,则返回-1。
indexOf方法是从字符串的开头向后搜索子字符串,lastIndexOf方法正好相反 这两个方法都可以接收两个参数:要查找的子字符串和查找的位置。
3.分隔字符串 split()
基于指定的字符,将字符串分割成字符串数组 当指定的字符为空字符串时,将会分隔整个字符串。
var str="a,b,c";
console.log(str.split(","));//["a","b","c"]
console.log(str.split(",",2));//["a", "b"] 第二个参数用来限制数组大小
console.log(str.split(/[^\,]+/));// ['', ',', ',', '']
//第一项和最后一项为空字符串是因为正则表达式指定的分隔符出现在了子字符串的开头,即"a"和"c"
//[^...] 不在方括号内的任意字符,这部分只要不是逗号都是分隔符
关于正则表达式可以参考如下地址:www.runoob.com/regexp/rege…
4.字符方法 charAt(),charCodeAt()
charAt(),charCodeAt()都接收一个参数,基于0的字符位置。 charAt()是以单字符字符串的形式返回给定位置的那个字符, charCodeAt()获取到的不是字符而是字符编码。
var str="hello world";
console.log(str.charAt(1));//e
console.log(str.charCodeAt(1));//101
//还可以使用方括号加数字索引来访问字符串中特定的字符
console.log(str[1]);//e
5.字符串大小写转换 toUpperCase() , toLowerCase()
const str="hello world";
str.toUpperCase();//HELLO WORLD
const str1="HELLO WORLD";
str1.toLowerCase();//hello world
6.去除字符串的头尾空格 trim()
trim() 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等。
trim() 方法不会改变原始字符串。
trim() 方法不适用于 null, undefined, Number 类型。
var str = " hello ";
str.trim();//hello
7.用本地特定的顺序来比较两个字符串 localeCompare()
string.localeCompare(target)//target 要以本地特定的顺序与 string 进行比较的字符串。
返回值
说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。
说明
把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。
localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。
此方法的主要用途就是将一些数组等按照本地操作系统提供的排序规则进行排序。
var array= ["a", "b", "d", "c"];
array= array.sort (function(item1,item2){
return item1.localeCompare(item2)
})
console.log(array);//["a", "b", "c", "d"]
8.将 Unicode 编码转为一个字符 fromCharCode()
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
注意: 该方法是 String 的静态方法,字符串中的每个字符都由单独的 Unicode 数字编码指定。使用语法: String.fromCharCode()。
var n = String.fromCharCode(65);
console.log(n);//A
9.匹配单个字符在字符串中各个位置,做了封装。
function singleCharPosition(char, string) {
var str = string;
var position = [];
var pos = str.indexOf(char);
while (pos > -1) {
position.push(pos);
pos = str.indexOf("d", pos + 1);
};
return position;
};
console.log(singleCharPosition('a', 'abcdeabda'));//[ 0, 3, 7 ]
10-1.字符串去重
1.for遍历
function removeRepeatStr(str) {
var newStr = '';
var flag;
var len = str.length;
for (var i = 0; i < len; i++) {
flag = 1;
var newLen = newStr.length;
for (var j = 0; j < newLen; j++) {
if (str[i] == newStr[j]) {
flag = 0;
break;
}
}
if (flag) {
newStr = newStr + str[i];
}
}
return newStr;
}
var str = "abcdefga";
console.log(removeRepeatStr(str));//abcdefg
2.indexOf()
function removeRepeatStr(str) {
var newStr = '';
var len = str.length;
for (var i = 0; i < len; i++) {
if (newStr.indexOf(str[i]) == -1) {
newStr = newStr + str[i];
}
}
return newStr;
}
var str = "abcdefga";
console.log(removeRepeatStr(str));//abcdefg
3.search()
function removeRepeatStr(str) {
var newStr = '';
var len = str.length;
for (var i = 0; i < len; i++) {
if (newStr.search(str[i]) == -1) {
newStr = newStr + str[i];
}
}
return newStr;
}
var str = "abcdefga";
console.log(removeRepeatStr(str));//abcdefg
4.对象属性去重
function removeRepeatStr(str) {
var obj = {};
var newStr = '';
var len = str.length;
for (var i = 0; i < len; i++) {
if (!obj[str[i]]) {
newStr = newStr + str[i];
obj[str[i]] = 1;
}
}
return newStr;
}
var str = "abcdefga";
console.log(removeRepeatStr(str));//abcdefg
10-2-1.数组去重(元素为单个元素)
1.利用ES6中的 Set 方法去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
return Array.from(new Set(arr))
}
console.log(unique(arr)); // [1,0,2,9,8,3]
2.使用双重for循环,再利用数组的splice方法去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
for (var i = 0, len = arr.length; i < len; i++) {
for (var j = i + 1, len = arr.length; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--; // 每删除一个数j的值就减1
len--; // j值减小时len也要相应减1(减少循环次数,节省性能)
}
}
}
return arr;
}
console.log(unique(arr));// [1,0,2,9,8,3]
3.利用数组的indexOf方法去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
var arr1 = []; // 新建一个数组来存放arr中的值
for (var i = 0, len = arr.length; i < len; i++) {
if (arr1.indexOf(arr[i]) === -1) {
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));// [1,0,2,9,8,3]
4.利用数组的sort方法去重(比较相邻元素)
注:array.sort( function ) 参数必须是函数,可选,默认升序
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
arr = arr.sort();
console.log('arr', arr);//arr [0, 0, 1, 1,2, 3, 8, 9]
var arr1 = [arr[0]];
console.log('arr1', arr1);//arr1 [0]
for (var i = 1, len = arr.length; i < len; i++) {
if (arr[i] !== arr[i - 1]) {
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));//[ 0, 1, 2, 3, 8, 9 ]
5.利用对象的属性去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
var arr1 = [];
var obj = {};
for (var i = 0, len = arr.length; i < len; i++) {
if (!obj[arr[i]]) {
arr1.push(arr[i]);
obj[arr[i]] = 1;
} else {
obj[arr[i]]++;
}
}
return arr1;
}
console.log(unique(arr));//[ 0, 1, 2, 3, 8, 9 ]
6.利用数组的includes去重
注:arr.includes(指定元素(必填),指定索引值(可选,默认值为0) ),有值返回true,没有则返回false。
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
var arr1 = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (!arr1.includes(arr[i])) { // 检索arr1中是否含有arr中的值
arr1.push(arr[i]);
}
}
return arr1;
}
console.log(unique(arr));//[ 0, 1, 2, 3, 8, 9 ]
7.利用数组的filter方法去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
// 如果新数组的当前元素的索引值 == 该元素在原始数组中的第一个索引,则返回当前元素
return arr.filter(function(item, index) {
return arr.indexOf(item, 0) === index;
});
}
console.log(unique(arr));//[ 0, 1, 2, 3, 8, 9 ]
8.利用函数递归去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
var arr1 = arr;
var len = arr1.length;
arr1.sort((a, b) => {
return a - b
})
function loop(index) {
if (index >= 1) {
if (arr1[index] === arr1[index - 1]) {
arr1.splice(index, 1);
}
loop(index - 1); // 递归loop,然后数组去重
}
}
loop(len - 1);
return arr1
}
console.log(unique(arr));//[ 0, 1, 2, 3, 8, 9 ]
9.利用ES6中的Map方法去重
let arr = [1, 0, 0, 2, 9, 8, 3, 1];
function unique(arr) {
let map = new Map();
//let arr1 = new Array(); // 数组用于返回结果
let arr1 = []
for (let i = 0, len = arr.length; i < len; i++) {
if (map.has(arr[i])) { // 判断是否存在该key值
map.set(arr[i], true);
} else {
map.set(arr[i], false);
arr1.push(arr[i]);
}
}
console.log(map)/*Map(6) {
1 => true,
0 => true,
2 => false,
9 => false,
8 => false,
3 => false
}*/
return arr1;
}
console.log(unique(arr));//[ 1, 0, 2, 9, 8, 3 ]
10-2-2.数组去重(元素为对象)
let arr = [{
name: 'zhangsan',
age: 20,
sex: "男"
}, {
name: 'zhangsan',
age: 22,
sex: "女"
},
{
name: 'lisi',
age: 22,
sex: "女"
}
];
function unique(arr, type) {
if (arr.length == 0) {
return arr;
} else {
if (type) {
var obj = {}
var newArr = arr.reduce((cur, next) => {
const key = next[type];
obj[key] ? "" : obj[key] = true && cur.push(next);
return cur;
}, [])
return newArr;
} else {
return Array.from(new Set(arr));
}
}
}
console.log(unique(arr, 'name'));/*[
{ name: 'zhangsan', age: 20, sex: '男' },
{ name: 'lisi', age: 22, sex: '女' }
]*/