功能描述
数组一些方法的应用。对应的是js30项目中第四天和第七天的内容。先列举一下用到的方法吧:
filter:过滤掉不符合条件的项
map:对每一项都做统一操作然后返回新的数组
sort:对数组按指定的方法排序(不会产生新数组)
reduce:对数组的每一项进行一些操作,可以通过指定初始值来指定返回类型
find:找数组里是不是有这个元素,返回元素
some:有一个数组项满足
every:所有的数组项都满足
findIndex:找数组里是不是有这个元素,返回下标
剩余数组的API都可以从MDN上查询。
题目1
给定数组:
inventors:
first:string
last:string
year:number
passed:number
people:
string ("Bernhard, Sandra")
data:
string (一堆重复的单词)
需要做:
1.找出在16世纪出生的人(year:[1500,1599])hint:使用filter
inventors.filter(i=>{return i.year<=1599&&i.year>=1500})
2.返回一个数组,数组的每一项是一个对象,包含了inventors数组中每一项数据的firstName和lastName hint:使用map
inventors.map(i=>{
const { first, last } = i;
let temp = {};
temp = { first, last };
return temp;
})
3.按出生日期对inventors排序,从大到小 hint使用sort
inventors.sort((a, b) => {
return a.year - b.year;
});
4.所有人加起来活了多少年 hint使用reduce
inventors.reduce((acc,cur)=>{
return acc+(cur.passed-cur.year)
},0)
5.按年龄对inventors排序
inventors.sort((a,b)=>{
return (b.passed-b.year)-(a.passed-a.year)
})
6.找出名字里带有'be'的人(题目给的网址打不开了,拿peple来试吧)
people.filter(i=>{
return i.toLowerCase().includes('be')
})
7.对people进行一个lastName排序
people.sort((a,b)=>{
const last_a = a.split(' ')[1]
const last_b = b.split(' ')[1]
return last_a>last_b //用减法就都是NaN了
})
8.计算data数组里每个单词出现几次
data.reduce((acc,cur)=>{
if(!acc[cur]){
acc[cur] = 0
}
acc[cur]++
return acc
},{})
第一次循环:
acc:{}
cur:data[0]
第二次循环:
acc:{data[0]:1}
cur:data[1]
以此类推
题目2
给定数组:
people:
name:string
year:number
comments:
text:string
id:number
需要做:
1.people数组中有没有19岁以上的人?
people.some(i=>{
const now_year = (new Date()).getFullYear()
return (now_year-i.year)>=19
})
2.people数组中是不是全都是19岁以上的人?
people.every(i=>{
const now_year = (new Date()).getFullYear()
return (now_year-i.year)>=19
})
3.在comments数组中找到id为823423的数据
comments.find(i=>{
return i.id==823423
})
4.找到comments数组中id为823423的数据并删除它
const result_4 = comments.findIndex((i) => {
return i.id == 823423;
});
comments.splice(1, result_4);