javascript - 请教 关于数组数据筛选问题

查看:76
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆