JavaScript 重点提炼
JS中字符串方法有哪些?
方法 | 描述 | 返回值 | 是否改变原始字符串 |
split | 字符串按指定字符分割为字符串数组 | Array | 否 |
lastIndexOf | 返回某个指定的字符串值最后出现的位置 | Number | 否 |
indexOf | 返回某个指定的字符串值在字符串中首次出现的位置 | Number | 否 |
concat() | 连接两个或多个字符串 | String,返回新字符串 | 否 |
substring() | 提取字符串中介于两个指定下标之间的字符,左闭右开[start,end) | String | 否 |
slice() | 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分,[start,end) | 否 | |
includes() | 判断字符串是否包含指定的子字符串 | 否 | |
replace() replaceAll() | 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串 | 否 | |
trim() | 用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等 | 否 |
var str = "how are you";
var word = str.split(" "); // ["how","are","you"]
slice()和substring()区别
负数截取,slice支持负数截取,而substring不支持。
JS 数组方法
方法 | 描述 | 返回值 | 是否改变原数组 |
join() | 用指定的分隔符将数组每一项拼接为字符串,默认逗号 | String | 否 |
push() | 数组末尾添加1/n | Number,返回数组新长度 | 改变数组长度 |
pop() | 数组末尾删除1 | 所有类型,返回在最后一个元素 | 改变数组长度 |
shift() | 数组开头删除1 | 所有类型,返回第一个元素 | 改变数组长度 |
unshift() | 向数组的开头添加一个或更多元素 | Number,返回数组新长度 | 改变数组长度 |
sort() | 数组元素排序,默认字母升序 | Array | 改变原始数组 |
reverse() | 颠倒数组中元素的顺序 | Array | 改变原始数组 |
concat() | 连接两个或多个数组 | Array,返回新数组 | 否 |
slice() | 返回从原数组中指定开始下标到结束下标之间的项组成的新数组 | Array,返回新数组 | 否 |
splice() | 可实现删除、插入和替换 | Array,返回删除元素的数组 | 改变原始数组 |
indexOf() | 从数组的开头(位置 0)开始向后查找 | Number | 否 |
lastIndexOf() | 从数组的末尾开始向前查找 | Number | 否 |
fill() | es6新增(es6+) 使用特定值填充数组中的一个或多个元素。 | 否 | |
filter() | 返回满足过滤条件组成的数组 | Array | 否 |
every() | 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回 true,参数Function | Boolean | 否 |
some() | 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回 true,参数Function | Boolean | 否 |
includes() | es7+ 判断一个数组是否包含一个指定的值 | Boolean | 否 |
sort() | |||
forEach() | 对数组进行遍历循环,对数组中的每一项运行给定函数 | - | 否 |
map() | 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值 | 否 | |
reduce() 、reduceRight() | 迭代数组的所有项(即累加器),然后构建一个最终返回的值 | ||
copyWithin() | es6+ 从数组的指定位置拷贝元素到数组的另一个指定位置中 | 改变原数组 | |
find() | 接受两个参数:一个回调函数,一个可选值用于指定回调函数内部的 this | 返回匹配的值 | 否 |
findIndex() | 同上 | 返回匹配值得索引 | 否 |
toLocaleString() 、toString() | 将数组转换为字符串 | ||
flat() 、flatMap() | es6+ 按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回 | 否 | |
entries() 、keys() 、values() | es6+ 遍历数组。它们都返回一个遍历器对象,可以用for...of循环进行遍历 |
JS实现数组去重
已知数组arr,对该数组进行去重,去重后的数组用uniqueArray代替。
1 利用ES6中的Set方法去重
let uniqueArray = Array.from(new Set(arr));
let uniqueArray = [...new Set(arr)];
2 some()方法去重
some()方法判断数组中是否存在满足条件的项,满足返回true。定义新数组承接未重复数据,遍历原始数组的时候,用新数组来判断数据是否已经出现过。
function uniqueArr(arr) {
// 新数组
let result = [arr[0]];
for(let i = 1; i < arr.length; i++) {
// 判断结果数组中是否存在一样的值,若果没有的话则将数据存入结果数组中
if(!result.some(val => {arr[i] === val})) {
result.push(arr[i]);
}
}
return result;
}
3 双重for循环+splice去重
第一层循环确保数组中的每一项都能被比较,第二层循环确保被比较项后的每一项都能跟被比较项比较,重复则splice(index,1)删除重复元素。
4 filter()+indexOf()方法去重
数组的当前元素在原始数组中的第一个索引==当前索引值,则第一次出现,即唯一。
function uniqueArr(arr) {
return arr.filter((item, index, arr)=>{
return arr.indexOf(item, 0) === index;
})
}
5 ES6中Map方法去重
通过创建一个空Map数据结构,然后遍历需要去重的数组,最后把数组的每一个元素作为key存到Map中,由于Map中不会出现相同的key,所以最后得到的结果就是数组去重后的所有元素。
function uniqueArr(arr) {
let map = new Map();
let result = [];
for (let i = 0, i < arr.length; i++) {
if (map.has(arr[i])) {
// 判断是否存在key
map.set(array[i], true);
} else {
map.set(array[i], false);
result.push(array[i]);
}
}
return result;
}
reduce()实现数组求平均值
// arr为已知数组,要求数组每项元素为数字类型Number
arr.reduce((acc, current) => acc + current) / arr.length
二维数组定义:
var arr = new Array(10); //表格有10行
for(var i = 0;i < arr.length; i++){
arr[i] = new Array(10).fill(0); //每行有10列
}
JS 进制转换
进制分:十进制、二进制、十六进制、八进制。
在JavaScript内部的默认情况下,二进制、十六进制、八进制字面量数值,都会自动转为十进制进行运算。
### 十进制转其他进制
toString()转换 => x.toString(n) - x十进制数字,n转换的进制(2,8,16,32)
### 其他进制转十进制
parseInt()转换 => parseInt(m,n) - m转换的数,n转换的数是多少进制的,如parseInt(x,2)代表将二进制数x转换为十进制
### 其他进制之间的转换 - 先转十进制,再转其他进制
// 表示将二进制的x转换为十六进制
parseInt(x,2).toString(16))
// 表示将十六进制的x转换为二进制
parseInt(x, 16).toString(2)
JS Map
Map 对象存有键值对,其中的键可以是任何数据类型。
Map 对象记得键的原始插入顺序。
Map 对象具有表示映射大小的属性。
注意:Map默认存储中,当存在key值相同时,后存储的key值对应的value会默认覆盖先前已有的value值。
方法 | 描述 |
new Map() | 创建新的 Map 对象。 |
set() | 为 Map 对象中的键设置值。 |
get() | 获取 Map 对象中键的值。 |
entries() | 返回 Map 对象中键/值对的数组。 |
keys() | 返回 Map 对象中键的数组。 |
values() | 返回 Map 对象中值的数组。 |
clear() | 删除 Map 中的所有元素。 |
delete() | 删除由键指定的元素。 |
has() |
如果键存在,则返回 true。 |
forEach() | Map迭代 为每个键/值对调用回调。 |
JavaScript中按值对Map进行排序
使用展开语法 (...) 获取 Map 条目的数组。
在数组上调用 sort() 方法。
将结果传递给 Map() 构造函数。
// 按值升序排序(从低到高)
const sortNumAsc = new Map([...map2].sort((a, b) => a[1] - b[1])); // 值为数字类型
const sortNumAsc = new Map([...map2].sort((a, b) => a[1] > b[1] ? 1 : -1)); // 值为字符类型
// 同理,按键升序排序(从低到高)
const sortKeyAsc = new Map([...map2].sort((a, b) => a[0] - b[0]));
JS Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Set中的特殊值
Set 对象存储的值总是唯一
的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
+0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
undefined 与 undefined 是恒等的,所以不重复;
NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复
方法 | 描述 |
new Set() | 创建新的 Set 对象。 |
add() | 添加元素 |
delete() | 删除元素 |
size | Set中元素个数 |
has() | 判断 Set 中是否包含某个元素 如果存在,则返回 true。 |
clear() | 清空Set实例 |
entries() | 返回 Set对象中键/值对的数组。 |
keys() | 返回 Set对象中键的数组。 |
values() | 返回 Set对象中值的数组。 |
Array.from() | Set转换成数组 Array.from(set) |
遍历:forEach、for of
JS正则表达式
未完待续……
JavaScript区分元素是字符还是数值类型的方法
isNaN
:检查其参数是否是非数字值。
如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。
typeof
:使用 typeof 操作符来检测变量的数据类型。
string、number、boolean、object。
在JavaScript中,数组是一种特殊的对象类型。 因此 typeof [1,2,3,4] 返回 object。
JS 数学Math相关
Math.cbrt()
:求一个数的立方根。
Math.abs()
:求一个数的绝对值。
Math.pow(m,n)
:求m的n次方。
- 感谢你赐予我前进的力量