习题详解错题深究
1.把字符串翻转 “kjihgfedcba”
思路:
先将字符串用split转换成数组,再用reverse将数组反转,最后join用‘,’分割。
2.分别统计出 及格和不及格的分数总和
//题目
let subjectList = [
{ score: 10 },
{ score: 20 },
{ score: 30 },
{ score: 40 },
{ score: 50 },
{ score: 60 },
{ score: 70 },
{ score: 80 },
{ score: 90 },
{ score: 100 },
];
思路:
先将及格和不及格的过滤出来,然后进行计算
let jige = subjectList.filter((item) => item.score >= 60)
不及格的也按同类型过滤
计算
const passSum = subjectList.filter(item=> item.score>60).reduce((acc,item)=> acc+=item.score ,0)
const failSum = subjectList.filter(item=> item.score<60).reduce((acc,item)=> acc+=item.score ,0)
3.截取域名 http://www.baidu.com 不能使用slice
思路:
回想学过的知识split分割,直接从?分割取前边简单粗暴,当然不止这一种方法。
console.log(href.split('?')[0]);
4.获取问号后面的参数 name=zs&age=18&sex=男 并且转成对象 {name:‘zs’,age:18,sex:‘男’}
思路:
和三题一样先分割第一次这次选后半段,之后进行第二次分割‘&’之后循环再用‘=分割’。
方法1
const paramsStr = href.split('?')[1] // name=zs&age=18&sex=男
const paramsArr = paramsStr.split('&') // ['name=zs', 'age=18', 'sex=男']
let obj = {}
paramsArr.forEach(it=>{
console.log(it.split('=')[0],it.split('=')[1]); })
5.数字去重
题目
let arr = [1, 2, 3, 4, 5, 1, 2, 3];
老规矩解题思路:
我们使用 filter() 方法遍历数组,并在回调函数中使用 indexOf() 方法来判断当前元素在数组中的第一个索引位置是否与当前索引位置相同。如果相同,说明是第一次出现的元素,保留在结果数组中,否则过滤掉。这种方法会保留元素的顺序。
const res = arr.filter((item,index,a) =>{
return a.indexOf(item) === index;});
console.log(res);
第二方法
先定义一个空的数组,之后用foreach来循环.includes来判断是否存在
const newArr = arr.reduce((acc,item)=> acc.includes(item)? acc : [...acc,item] ,[])
console.log(newArr,'newArr');
6. 统计数组中每个元素出现的次数
思路:
同样使用循环遍历,在循环中判断元素出现的次数,
初始值是0,先把数值传到空数组有相同的元素值加一。
let arr1 = { }
arr.forEach(it =>
arr1[it]? arr1[it] ++ : arr1[it] = 1
})
console.log(arr1);