# 1.字符串反向:'ded12' -> '21ded'
let str = "cfjeiochw2390wih8";
console.log("str", str);
let newstr = str.split("").reverse().join("");
console.log("newstr", newstr);
1
2
3
4
2
3
4
老是搞混split,slice,splice
- 分割 split() 方法用于把一个字符串分割成字符串数组。不会修改原数组,返回新数组
- 传入(''),会把原来的字符串每个字符都会被分割,并返回数组
- 传入(' '),会把字符串在有空格的地方分割,并返回数组
- 传入('',3),返回前三个字符
- 传入('😂,或者其他的符号,原字符串:'a🅱️c',返回['a','b','c']
- 截取 slice() 方法可从已有的数组中返回选定的元素。不修改原数组,返回新数组
- 这个方法既可以用在字符串身上也可以用在数组身上
- 接收两个参数start,end(可选)
- start若为负,-1表示从最后一个开始,-2倒数第二个
- end可以省略,若有end,不包含此元素
- slice(-1),返回的是最后一个元素
- slice(2,4),返回的是下标为2,3的两个元素
- 删除或添加 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。会修改原数组
- 三个参数:从第几个开始,删几个,用什么来替换
记单词时间:split分裂 slice切片 splice拼接 但凡我英语好一点-_-这些还用记么。。
# 2.将嵌套数组转成一维数组
const arr = [1,[2,[3],4],5]
function flatten(arr) {
for (let i in arr) {
if (Array.isArray(arr[i])) {
arr.splice(i, 1, ...flatten(arr[i]))
}
}
return arr
}
flatten(arr)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
递归实现的,每次判断数组中的单个元素是否是数组, 假如此元素是数组,就删除原数组中的这一项元素,然后再次调用函数,并且判断此元素的每一项元素是否为数组 采用扩展运算符来将数组展开成单个的元素
# 数组去重
# 方法一:Set
let originalArray =[1,2,3,3,3,24,54,54,2,435,1,34]
let resultArr = [...new Set(originalArray)]
//let resultArr = [Array.from(new Set(originalArray))]
console.log(resultArr)
1
2
3
4
2
3
4
Set是es6新增的一种数据结构,不允许有重复的值
将数组转成Set,再通过扩展运算符或者Array.from转成数组
# 方法二:indexOf或includes
const resultArr = [];
let originalArray = [1, "1", 2, true, "true", false, null, 1,2, "abc", undefined, NaN, NaN];
for (let i = 0; i < originalArray.length; i++) {
if (resultArr.indexOf(originalArray[i]) < 0) {
resultArr.push(originalArray[i]);
}
}
console.log('indexOf', resultArr);
const resultArr1 = [];
for (let i = 0; i < originalArray.length; i++) {
if (!resultArr1.includes(originalArray[i])) {
resultArr1.push(originalArray[i]);
}
}
console.log('includes',resultArr1);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
用一个新数组来保存,遍历旧数组,判断新数组中有没有这个元素
没有就push进去,有就不管
区别:indexOf不能对NaN去重
还有好多好多种方法。。。不想看了,,,