JavaScript 数组初学者指南(第 2 部分)
大家好!首先,我对这篇文章的前篇所获得的反响感到非常惊喜。真的非常感谢。如果
您是第一次阅读这篇文章,请务必点击此处查看本文的第一部分!
我们将针对此帖子考虑以下方法。
- 减少()
- 地图()
- 筛选()
- 种类()
让我们开始吧。
首先,让我们定义一个(或两个)用于此目的的数组。
// Array 1
const students = [
{firstname: 'Tammy', lastname:'Benjamin', admitted: 2011, graduation: 2014},
{firstname: 'Deborah', lastname:'Emeni', admitted: 2017, graduation: 2021},
{firstname: 'Daniel', lastname:'Oke', admitted: 2009, graduation: 2012},
{firstname: 'Ogurinka', lastname:'Benjamin', admitted: 2012, graduation: 2016},
{firstname: 'Nelson', lastname:'Abel', admitted: 2017, graduation: 2021},
{firstname: 'Ellie', lastname:'Julie', admitted: 2013, graduation: 2017},
];
// Array 2
const teachers = [
'Stephen', 'Richard', 'Biodun', 'Ruth',
'Peter', 'Paul', 'John', 'Jacob', 'Chris',
'Emeka', 'Nicole', 'Jaden', 'Albert',
];
数组 1 包含一个对象数组(在此处阅读有关对象的信息),其中指定了姓名、入学年份和毕业年份。
数组 2 保存了教师的基本数组。
假设我们想从数组中获取 2017 年录取的学生名单,这可以使用filter()方法实现
filter() 方法是什么?
filter() 方法创建一个新数组,其中包含通过测试的数组元素。这对于访问对象属性非常有用。如果当前元素通过条件,则会将其发送到新数组。
在上面的练习中,我们想要获取对象数组中特定属性的值,在本例中,我们获取的是 2017 年录取的所有学生。
代码:
const admittedIn2017 = students.filter(function(student) {
if (student.admitted === 2017) {
return true;
}
});
console.log(admittedIn2017);
解释:
上面的代码遍历了整个数组,检查所有出现 admit 值为 2017 的情况,然后返回一个对象并显示在控制台上。
我们获取 students 数组并对其进行过滤。filter 方法接受一个带有参数的函数。我们使用此参数引用对象中的属性(在本例中为“admitted”),然后设置条件。每次满足条件时,函数都返回 true。
挑战:
作为个人挑战,添加更多数组项并尝试返回在一定年份范围内(例如 2012 年至 2021 年之间)毕业的每个学生
地图()
假设您想要获取数组中每个学生的名字和入学年份,我们可以使用map()方法实现这一点。
map () 方法通过对每个数组元素执行函数来创建一个新数组。在我们的例子中,我们想要获取每个学生的名字和毕业年份。
需要注意的是,新数组的长度与原始数组的长度相同。
代码:
const firstNameAndGradYear = students.map(function(student) {
return student.firstname + " " + student.graduation;
});
console.log(firstNameAndGradYear);
解释:
在这里,我们遍历学生数组并返回每个对象的“firstname”和“graduation”的值,然后将其显示到我们的控制台。
挑战:
尝试返回每个学生的姓氏和名字。(很简单)
种类()
sort()方法根据特定条件对数组进行排序并返回一个新数组。
假设我们想根据学生的毕业年份对他们进行排序
代码:
const aphabetically = students.sort(function(a, b) {
if (a.firstname > b.firstname) {
return 1;
}
else {
return -1;
}
});
console.log (aphabetically);
解释:
上面的代码遍历了学生数组并比较了所有名字。它检查学生数组并根据名字的字母顺序对其进行排序。它接受两个参数 (a,b),并根据字母顺序上下移动数组。
挑战:
尝试根据毕业年份顺序对数组进行排序。
减少()
reduce ()方法对每个数组元素运行一个函数,将其减少为单个值。
为了更好地理解这一点,我们将尝试验证我们数组中的所有学生将在学校度过多少年。
代码:
const yearInSchool = students.reduce(function(total, student) {
return total + (student.graduation - student.admitted)
}, 0);
console.log(yearInSchool);
解释:
我们遍历数组,并输出数组中所有学生在校的总年数。这里的“total”参数用作累加器,我们为其分配初始值 0,每次遍历数组时,都会返回数学运算的结果(student.graduation - student.admitted)。您可以点击此处了解更多关于它及其工作原理的信息!
挑战:
尝试计算 2021 年毕业的学生将在学校度过的年数
附加数组方法
还有一些其他数组方法在不同场景下也很有用
到字符串()
这会将数组转换为字符串。
用法:(使用我们的教师阵列)
teachers.toString() // Converts the teachers array to string separated by a comma
加入()
它的行为就像 toString(),但此外你还可以指定分隔符
用法:
teachers.join('/'); // Converts the teachers array to string separated by a forward slash
每一个()
every() 方法检查所有数组值是否通过测试。
示例:使用我们的学生数组
例如,我们将尝试检查所有学生的入学年份是否大于 2011
const greaterThan2011 = students.every(function(student) {
return student.admitted >= 2011;
});
console.log(greaterThan2011); // will return false
一些()
some() 方法检查某些数组值是否通过测试。
示例:使用我们的学生数组
const greaterThan2011 = students.some(function(student) {
return student.admitted >= 2011;
});
console.log(greaterThan2011); // will return true
寻找()
find() 方法返回通过测试函数的第一个数组元素的值
示例:使用我们的学生数组
const greaterThan2011 = students.find(function(student) {
return student.admitted >= 2011;
});
console.log(greaterThan2011);
索引()
indexOf() 方法在数组中搜索元素值并返回其位置。它接受两个参数:要搜索的元素(必需)以及搜索的起始位置。负值将从给定位置开始,从末尾开始计数,并搜索到末尾(可选)。
示例:使用我们的教师数组
console.log(teachers.indexOf("Biodun")); // returns 2
lastIndexOf()
这与 indexOf() 相同,但返回指定元素最后一次出现的位置。
包括()
includes() 方法判断数组是否包含指定元素。
示例:使用我们的教师数组
console.log(teachers.includes("Biodun")); // returns true
概括
根据你打算完成的任务,你会发现还有几十种有用的数组方法。我花了一些时间列出了一些我曾经使用过的方法,希望你能从中有所收获。谢谢。
文章来源:https://dev.to/ogurinkaben/beginner-s-guide-to-javascript-arrays-part-2-411p