javascript - 请教 关于数组数据筛选问题
问题描述
慕课网的编程练习题:
在一个大学的编程选修课班里,我们得到了一组参加该班级的学生数据,分别是姓名、性别、年龄和年级,接下来呢,我们要利用JavaScript的知识挑出其中所有是大一的女生的的名字哦。
学生信息如下:
('小A','女',21,'大一'), ('小B','男',23,'大三'),
('小C','男',24,'大四'), ('小D','女',21,'大一'),
('小E','女',22,'大四'), ('小F','男',21,'大一'),
('小G','女',22,'大二'), ('小H','女',20,'大三'),
('小I','女',20,'大一'), ('小J','男',20,'大三')
任务
第一步: 把这些数据组成一个数组,方便我们之后操作哦。
第二步: 筛选数据吧,首先找出都是大一的所有信息 ;
第三步: 最后再一次筛选上一步得到的数据,打印出都是女生的姓名 ;
——————————————————下面是我的答案————————————————
<script type="text/javascript">
//第一步把之前的数据写成一个数组的形式,定义变量为 infos
var infos = [
["小A","女",21,"大一"],
["小B","男",23,"大三"],
["小C","男",24,"大四"],
["小D","女",21,"大一"],
["小E","女",22,"大四"],
["小F","男",21,"大一"],
["小G","女",22,"大二"],
["小H","女",20,"大三"],
["小I","女",20,"大一"],
["小J","男",20,"大三"]
];
//第一次筛选,找出都是大一的信息
document.write("<p>使用for循环方法筛选出大一的数据:</p>");
var newStudent = new Array();//定义一个新的数组变量存放筛选出来的数据后续处理
for(var i=0; i<infos.length; i++)
{
if(infos[i][3]=="大一")
{
document.write(infos[i]+ "<br/>"); //正确
newStudent[i]=infos[i]; //这里只存入了infos[0]
}
}
document.write("<br />");
for(var j=0; j<newStudent.length; j++)
{
if(newStudent[j][1]=="女")
{
document.write(newStudent[j][0]+ "<br/>");//小A
}
}
</script>
第三步的要求是可以用&同时判断两个条件,但是我想了另一方法去实现,就是把第二步筛选出来的数据存放到另一个变量newStudent里,再判断。
但是循环赋值只存入了infos[0],这是什么原因呢?
你控制台打断点不难发现你的 newStudent 其实是一个稀疏数组(数组里的元素不是连续的)图片如下
这样的话在 if(newStudent[j][1]=="女")
这句就会抱错,因为 newStudent[1] 为 undefined 再找 undefined[1] 一定会抱错,解决办法简单,直接把这句改成if(newStudent[j] && newStudent[j][1]=="女")
当 newStudent[j] 为 undefined 时整个表达式为假直接跳过判断。
第二种解决办法是在插入的时候就不产生稀疏数组 newStudent.push(infos[i]);
这样的话数组一定是连续的,但是上面的 && 还是建议加上,如果你中间的操做误删了 newStudent 中的元素产生稀疏数组,判断时还是会抱错
这篇关于javascript - 请教 关于数组数据筛选问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!