JavaScript字符串 数组处理
字符串处理
var str = "Hello world!"
// 返回指定字符首次出现的位置,不存在则返回-1
console.log(str.indexOf("e")) // 1
// 返回指定字符最后出现的位置,不存在则返回-1
console.log(str.lastIndexOf("l")); // 9
// 返回指定位置的字符(index=4的字符)
console.log(str.charAt(6)) // "w"
// 查找指定或正则相匹配的字符串,不存在则返回-1
console.log(str.search("w")) // 6
console.log(str.search(/w/g)) // 6
// 匹配指定的值返回数组,不存在则返回null
console.log(str.match("H")) // ["H", index: 0, input: "Hello world!", groups: undefined]
console.log(str.match(/l/g)) // ["l", "l", "l"]
// 正则匹配,返回布尔值
var reg = new RegExp("world");
console.log(reg.test(str)) // true
// 字符串替换
console.log(str.replace('lo', 555)); // 'Hel555 world!'
console.log(str.replace(/l/g, 6)); // 'He66o wor6d!'
console.log(str.replace(/(\s)/g, "")); // 'Helloworld!' (删除所有空格)
// 删除前后空格
console.log(" Hello world! ".trim()) // 'Hello world!'
// 转小写
console.log(str.toLowerCase()) // 'hello world!'
// 转大写
console.log(str.toUpperCase()) // 'HELLO WORLD!'
// 把字符串分割成字符串数组
console.log(str.split("")); // ["H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]
// 提取字符串的某个部分(选取index 1-4 不含4)
console.log(str.slice(1, 4)) // "ell"
// 提取字符串中介于两个指定下标之间的字符
console.log(str.substring(1, 4)) // "ell"
// substring(start, end)
// substring 方法返回的子串包括 start 处的字符, 但不包括 end 处的字符。
// 如果 start 与 end 相等, 那么该方法返回的就是一个空串( 即长度为 0 的字符串)。
// 如果 start 比 end 大, 那么该方法在提取子串之前会先交换这两个参数。
// 如果 start 或 end 为负数, 那么它将被替换为 0。
// 从指定下标开始提取指定长度的字符(从1开始选4个长度字符)
console.log(str.substr(1, 4)) // "ello"
// stringObject.substr(start[, length])
// 如果start为负数, 则start = str.length + start。
// 如果 length 为 0 或负数, 将返回一个空字符串。
// 如果没有指定该参数, 则子字符串将延续到stringObject的最后。
slice、substr和substring的区别
-
slice 和 substring 接收的是起始位置和结束位置(不包括结束位置),而 substr 接收的则是起始位置和所要返回的字符串长度
-
substring 是以两个参数中较小一个作为起始位置,较大的参数作为结束位置
-
当接收的参数是负数时,slice 会将它字符串的长度与对应的负数相加,结果作为参数;substr 则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数;substring 则干脆将负参数都直接转换为0
数组处理
var arr = [1, 2, 3, 4, 5]
arr.push(6, 7, 8); // 结尾添加 [1, 2, 3, 4, 5, 6, 7, 8]
arr.pop(); // 结尾删除 [1, 2, 3, 4]
arr.shift(); // 开头删除 [2, 3, 4, 5]
arr.unshift(6, 7, 8); // 开头添加 [6, 7, 8, 1, 2, 3, 4, 5]
var arr1 = [1, 2, 3, 4, 5];
console.log(arr1.join('-')) // '1-2-3-4-5' 数组转字符串
console.log(arr1.slice(1, 3)) // [2, 3] 不会影响原数组
console.log(arr1.slice(1)) // [2,3,4,5]
// splice万能操作,会影响原数组
// 增
var arr2 = [1, 2, 3, 4, 5];
arr2.splice(1, 0, 'w');
console.log(arr2); // [1, "w", 2, 3, 4, 5]
// 删
var arr3 = [1, 2, 3, 4, 5];
arr3.splice(1, 2);
console.log(arr3); // [1, 4, 5]
// 改
var arr4 = [1, 2, 3, 4, 5]
arr4.splice(1, 1, 'p');
console.log(arr4) // [1, "p", 3, 4, 5]
// 倒序,会影响原数组
var arr5 = [9, 2, 6, 4, 3];
arr5.reverse();
console.log(arr5); // [3, 4, 6, 2, 9]
// 排序,会影响原数组
var arr6 = [9, 2, 10, 4, 3];
arr6.sort();
console.log(arr6); // [10, 2, 3, 4, 9] ? 有问题
// 修改上面的排序
var arr7 = [9, 2, 10, 4, 3],
arr8 = arr7.sort(function (n1, n2) {
return n1 - n2;
})
console.log(arr8) // [2, 3, 4, 9, 10]
// 将以上排序封装成方法
var arr9 = [9, 2, 10, 4, 3]
function sortFn(n1, n2) {
return n1 - n2
}
console.log(arr9.sort(sortFn)) // [2, 3, 4, 9, 10]