数组的一些方法

157 阅读2分钟

功能描述

数组一些方法的应用。对应的是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);