字符串、数组、对象常用方法(持续更新)
1、数组常用方法:
1.1、join
join将数组转为字符串
**注释:**join() 方法不会改变原始数组。
let arr = [1,2,3,4]
let str = arr.join('、')
console.log(str)//1、2、3、4
1.2、shift
shift方法移除数组的第一项并返回删除的元素
**注释:**shift() 方法将改变原始数组。
let arr = [1,2,3,4]
arr.shift()//1
console.log(arr)//[2,3,4]
1.3、unshift
unshift方法可向数组的开头添加一个或更多元素,并返回新的长度
**注释:**unshift() 方法将改变原始数组。
let arr = [1,2,3,4]
arr.unshift(0)//5
console.log(arr)//[0,1,2,3,4]
1.4、push
push向数组末尾添加新项目,并返回新长度
**注释:**push() 方法将改变原始数组。
let arr = [1,2,3,4]
arr.push(5)//5
console.log(arr)//[1,2,3,4,5]
1.5、pop
pop方法用于删除数组的最后一个元素并返回删除的元素
**注释:**pop() 方法将改变原始数组。
let arr = [1,2,3,4]
arr.pop()//4
console.log(arr)//[1,2,3]
1.6、sort
sort方法用于对数组的元素进行排序。
**注释:**sort() 方法将改变原始数组。
let arr = [
{id:5},
{id:1},
{id:4},
{id:2},
]
//a-b为从小到大,b-a
arr.sort((a,b)=>a.id - b.id)
console.log(arr)//[1,2,4,5]
1.7、reverse
reverse方法反转数组中元素的顺序。
**注释:**reverse() 方法将改变原始数组。
let arr = [1,2,3,4]
array.reverse()
console.log(arr)//[4,3,2,1]
1.8、slice
slice() 方法以新的数组对象,返回数组中被选中的元素。
slice() 方法选择从给定的 start 参数开始的元素,并在给定的 end 参数处结束,但不包括。
**注释:**slice() 方法不会改变原始数组。
let arr = [1,2,3,4,5,6]
//返回从0开始到3结束的所有字符(不包括3)
console.log(arr.slice(0,3)) //123
//返回从3开始的所有字符
console.log(arr.slice(3)) //456
1.9、splice
splice() 方法向/从数组添加/删除项目,并返回删除的项目。
**注释:**splice() 方法会改变原始数组。
let arr = [1,2,3,4,5,6]
// 在位置 2,添加 2 个元素:
arr.splice(2, 0, 2.1, 2.2);
console.log(arr)//[1,2,2.1,2.2,3,4,5,6]
//在位置 2,添加新项目,并删除 1 个项目:
arr.splice(2, 1, "three");
console.log(arr)//[1,2,three,4,5,6]
//在位置 2,删除 2 个项目:
arr.splice(2, 2);
console.log(arr)//[1,2,5,6]
1.10、indexOf
indexOf()方法返回指定元素在数组中出现的位置索引,如果没有出现则返回-1。
let arr = [1,2,3,4,5,6]
console.log(arr.indexOf(2)) // 1
console.log(arr.indexOf(7)) // -1
//indexOf方法还可以接受第二个参数,表示搜索的开始位置。
console.log(arr.indexOf(3,1)) //2
console.log(arr.indexOf(3,3)) //-1
1.11、toString
toString()方法返回数组的字符串形式。
**注释:**toString() 方法不会改变原始数组。
let arr = [1,2,3,4,5,6]
console.log(arr.toString()) // "1,2,3,4,5,6"
1.12、concat
concat()方法用于多个数组的合并。它将新数组的成员,添加到原数组的尾部,然后返回一个新数组。
**注释:**concat() 方法不会改变原始数组。
let arr = [1,2,3,4,5,6]
console.log(arr.concat([7,8,9]))//[1, 2, 3, 4, 5, 6, 7, 8, 9]
1.13、Array.from
Array.from() 方法用于将类数组对象或可迭代对象转化为数组。
**注释:**Array.from() 方法不会改变原始数组。
-
基本使用:
// 参数为数组,返回与原数组一样的数组 console.log(Array.from([1, 2])); // [1, 2] // 参数含空位 console.log(Array.from([1, , 3])); // [1, undefined, 3] -
类数组对象
let arr = Array.from({ 0: '1', 1: '2', 2: 3, length: 3 }); console.log(arr); // ['1', '2', 3] -
可迭代对象
-
转换map
let map = new Map(); map.set('key0', 'value0'); // Map(1) {'key0' => 'value0'} map.set('key1', 'value1'); // Map(2) {'key0' => 'value0', 'key1' => 'value1'} console.log(Array.from(map)); // [['key0', 'value0'],['key1', 'value1']] -
转换 set
let arr = [1, 2, 3]; let set = new Set(arr); // Set(3) {1, 2, 3} console.log(Array.from(set)); // [1, 2, 3] -
转换字符串
let str = 'abc'; console.log(Array.from(str)); // ["a", "b", "c"]
-
-
参数:Array.from(arrayLike[, mapFn[, thisArg]])
-
arrayLike:想要转换的类数组对象或可迭代对象
console.log(Array.from([1, 2, 3])); // [1, 2, 3] -
mapFn:可选,map 函数,用于对每个元素进行处理,放入数组的是处理后的元素
console.log(Array.from([1, 3, 5], (item) => item * 2)); // [2, 6, 10] -
thisArg:可选,用于指定 map 函数执行时的 this 对象
let map = { do: function(item) { return item * 2; } } let arrayLike = [1, 2, 3]; console.log(Array.from(arrayLike, function (item){ return this.do(item); }, map)); // [2, 4, 6]
-
1.14、find
查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。没有则返回 undefined。
**注释:**find() 方法不会改变原始数组。
let arr = Array.of(1, 2, 3, 4);
console.log(arr.find(item => item > 2)); // 3
let arr2 = [, 1]
// 数组空位处理为 undefined
console.log(arr2.find(item => true)); // undefined
1.15、findIndex
查找数组中符合条件的元素索引,若有多个符合条件的元素,则返回第一个元素索引。没有则返回 -1。
**注释:**findIndex() 方法不会改变原始数组。
let arr = Array.of(1, 2, 1, 3);
// 参数1:回调函数
console.log(arr.findIndex(item => item == 2)); // 1
// 参数1:回调函数
// 参数2(可选):指定回调函数中的 this 值
let map = {
do: function (item){
return item == 2
}
}
let index = arr.findIndex(function(item){
return this.do(item)
}, map)
console.log(index); // 1
let arr2 = [, 1]
// 数组空位处理为 undefined
console.log(arr2.findIndex(item => true)); //0
1.16、flat
flat()方法用于将嵌套数组转一维数组。
**注释:**flat() 方法不会改变原始数组。
console.log([1 ,[2, 3]].flat()); // [1, 2, 3]
// 指定转换的嵌套层数
console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]]
// 不管嵌套多少层
console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5]
// 自动跳过空位
console.log([1, [2, , 3]].flat()); // [1, 2, 3]
2、字符串常用方法:
2.1、slice
slice返回一个新的字符串
**注释:**slice() 方法不会改变原始字符串。
let a = '123456'
//返回从0开始到3结束的所有字符(不包括3)
console.log(a.slice(0,3)) //123
//返回从3开始的所有字符
console.log(a.slice(3)) //456
2.2、split
split将字符串分割为数组
**注释:**split() 方法不会改变原始字符串。
let a = '1,2,3,4,5,6'
console.log(a.split(',')) //[1,2,3,4,5,6]
2.3、indexOf
indexOf返回某个指定的字符串值在字符串中首次出现的位置,如果不存在返回-1
注意:indexOf()方法对大小写敏感,如果没有找到,返回-1。第二个参数表示从哪个下标开始查找,默认从下标0开始查找。
let str = 'Hello World'
console.log(str.indexOf('o')) //4
console.log(str.indexOf('a')) //-1
console.log(str.indexOf('e',1)) //-1
console.log(str.indexOf('e',3)) //1
2.4、lastIndexOf
lastIndexOf返回某个指定的子字符串在字符串中最后出现的位置。
注意:lastIndexOf()方法对大小写敏感,如果没有找到,返回-1。第二个参数表示从哪个下标开始查找,默认从下标0开始查找。
let str = 'Hello World'
console.log(str.lastIndexOf("o")) //7
console.log(str.lastIndexOf('a')) //-1
console.log(str.lastIndexOf('e',1)) //1
console.log(str.lastIndexOf('e',3)) //1
2.5、toLowerCase
toLowerCase将字符串转为小写,返回新的字符串。
**注释:**toLowerCase() 方法不会改变原始字符串。
let a = 'Hello World'
console.log(a.toLowerCase()) //hello world
2.6、toUpperCase
toUpperCase将字符串转为大写,返回新的字符串。
**注释:**toUpperCase() 方法不会改变原始字符串。
let a = 'hello world'
console.log(a.toUpperCase()) //HELLO WORLD
2.7、charAt
charAt返回指定下标位置的字符。如果index不在0-str.length(不包含str.length)之间,返回空字符串。
let a = '1,2,3,4,5,6'
console.log(a.charAt(6)) //4
2.8、substring&substr
substring和substr的区别:
- 相同点:如果只是写一个参数,两者的作用都一样:都是是截取字符串从当前下标以后直到字符串最后的字符串片段。
- 不同点:
- substr(startIndex,lenth): 第二个参数是截取字符串的长度(从startIndex开始,截取lenth个字符);
- substring(startIndex, endIndex): 第二个参数是截取字符串最终的下标 (截取2个位置之间的字符串,‘含头不含尾’)。
2.8.1、substring
substring截取字符串中介于两个指定下标之间的字符。
注意:substring()用法与slice()一样,但不接受负值的参数。
let str="Hello World";
//从索引为2开始截取,一直到str.length
console.log(str.substring(2)) //llo World
//从索引为2开始截取,截止到2
console.log(str.substring(2,2)) //如果两个参数相等,返回长度为0的空串
//从索引为2开始截取,截止到索引为7
console.log(str.substring(2,7)) //llo W
2.8.2、substr
substr返回从指定下标开始指定长度的的子字符串。
注意:如果没有指定length,返回从下标开始处结尾处的所有字符串。
let str="Hello World";
//从索引为2开始截取,一直到str.length
console.log(str.substring(2)) //ello World
//从索引为2开始截取,截取两个字符
console.log(str.substring(2,2)) //ll
//从索引为2开始截取,截取7个字符
console.log(str.substring(2,7)) //llo Wor
2.9、replace
replace 在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
let str="Hello World";
//正则
let reg=/o/ig; //o为要替换的关键字,不能加引号,否则替换不生效,i忽略大小写,g表示全局查找。
console.log(str.replace(reg,"**"))//Hell** W**rld
2.10、match
match返回所有查找的关键字内容的数组,如果不存在返回null。
var str="To be or not to be";
//正则
var reg=/to/ig;//to为要匹配的关键字,不能加引号,否则替换不生效,i忽略大小写,g表示全局查找。
console.log(str.match(reg)); //["To", "to"]
2.11、repeat
repeat 方法返回新的字符串,表示字符串复制指定次数。
let str="Hello World";
let str2 = str.repeat(3)
console.log(str2); //Hello WorldHello WorldHello World
2.12、includes、startsWith、endsWith
- includes:返回布尔值,判断是否找到参数字符串。
- startsWith:返回布尔值,判断参数字符串是否在原字符串的头部。
- endsWith:返回布尔值,判断参数字符串是否在原字符串的尾部。
以上三个方法都可以接受两个参数,需要搜索的字符串,和可选的搜索起始位置索引
let string = "apple,banana,orange";
string.includes("banana"); // true
string.startsWith("apple"); // true
string.endsWith("apple"); // false
string.startsWith("banana",6) // true
2.13、padStart、padEnd
- padStart:返回新的字符串,表示用参数字符串从头部(左侧)补全原字符串。
- padEnd:返回新的字符串,表示用参数字符串从尾部(右侧)补全原字符串。
let str = '1'
let str2 = str.padStart(3,'0')
let str3 = str.padEnd(3,'0')
console.log(str2); // 001
console.log(str3); // 100
3、对象常用方法:
3.1、Object.keys
Object.keys()返回一个给定对象的自身可枚举属性的属性名组成的数组
const obj = {
name:'张三',
sex:'男',
age:18
}
console.log(Object.keys(obj)) //['name','sex','age']
3.2、Object.values
Object.values()返回一个给定对象的自身可枚举属性的属性值组成的数组
const obj = {
name:'张三',
sex:'男',
age:18
}
console.log(Object.values(obj)) //['张三','男',18]
3.3、Object.entries
Object.entries()返回一个给定对象自身可枚举属性的键值对数组
const obj = {
name:'张三',
sex:'男',
age:18
}
console.log(Object.entries(obj)) //[['name', '张三'],['sex', '男'],['age', 18]]
3.4、Object.fromEntries
Object.fromEntries()把键值对数组转换为一个对象,是Object.entries()的逆操作。
const arr = [['name', '张三'],['sex', '男'],['age', 18]]
console.log(Object.fromEntries(arr)) //{name: '张三', sex: '男', age: 18}
3.5、Object.assign
Object.assign用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
let target = { a: 1, b: 2 };
let source = { c: 4, d: 5 };
console.log(Object.assign(target, source))//{a: 1, b: 2, c: 4, d: 5}
console.log(target)//{a: 1, b: 2, c: 4, d: 5}
console.log(source)//{b: 4, c: 5}