任务十四:零基础JavaScript编码(二)

任务目的

  • 在上一任务基础上继续JavaScript的体验
  • 学习JavaScript中的if判断语法,for循环语法
  • 学习JavaScript中的数组对象
  • 学习如何读取、处理数据,并动态创建、修改DOM中的内容

任务描述

  • 参考以下示例代码,页面加载后,将提供的空气质量数据数组,按照某种逻辑(比如空气质量大于60)进行过滤筛选,最后将符合条件的数据按照一定的格式要求显示在网页上
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>IFE JavaScript Task 01</title>
  </head>
<body>

  <h3>污染城市列表</h3>
  <ul id="aqi-list">
<!--   
    <li>第一名:福州(样例),10</li>
  	<li>第二名:福州(样例),10</li> -->
  </ul>

<script type="text/javascript">

var aqiData = [
  ["北京", 90],
  ["上海", 50],
  ["福州", 10],
  ["广州", 50],
  ["成都", 90],
  ["西安", 100]
];

(function () {

  /*
  在注释下方编写代码
  遍历读取aqiData中各个城市的数据
  将空气质量指数大于60的城市显示到aqi-list的列表中
  */

})();

</script>
</body>
</html>

任务注意事项

  • 实现简单功能的同时,请仔细学习JavaScript基本语法、事件、DOM相关的知识
  • 请注意代码风格的整齐、优雅
  • 代码中含有必要的注释
  • 其中的数据以及60的判断逻辑可以自行设定
  • 建议不使用任何第三方库、框架
  • 示例代码仅为示例,可以直接使用,也可以完全自己重写

任务完成及总结:

 实现思路:首先将符合条件的城市刷选出来,然后进行排序,最后将结果输出,下面请看相关案例。

案例一:

(function () {
     //选出空气质量指数大于60的城市
    var sortCount = aqiData.filter(function(item){
         return (item[1] > 60);
    });
    //对大于60的城市进行从大到小排序
    sortCount.sort(function(a, b){
         return b[1] - a[1];
    });
     var aqiList = document.getElementById('aqi-list');
    //将结果显示
    for(var i = 0; i < sortCount.length; i++){
         aqiList.innerHTML += '<li>第' + (i + 1) + '名:' + sortCount[i][0] + '(样例) , ' + sortCount[i][1] + '</li>';
            }            
})();

利用filter函数将符合相关条件的城市选出来,同时把所有刷选出的数据存储在新数组中。更多详情请戳JS中filter()方法。接着根据新数组的第二个数值进行从大到小的排序,更多sort()知识请戳JS中sort()方法。其中还能继续优化,把innerHTML替换为createTextNode(),如:

for(var i = 0; i < sortCount.length; i++){
    //aqiList.innerHTML += '<li>第' + (i + 1) + '名:' + sortCount[i][0] + '(样例) , ' + sortCount[i][1] + '</li>';
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(""+(i+1)+"名:"+sortCount[i][0]+","+sortCount[i][1]));
    aqiList.appendChild(li);
 }

 demo演示

案例二:

(function () {
     var oList = document.getElementById("aqi-list");
     var arr = ["","","","",""];
     //sort 从大到小
     aqiData.sort(function(a,b){
       return b[1]-a[1];
     });
     oList.innerHTML = "";
     for(var i=0;i<aqiData.length;i++){
          
       if(aqiData[i][1]>60){
      //创建一个节点
var oLi = document.createElement("li"); oLi.innerHTML = ''+arr[i]+'名:'+aqiData[i][0]+','+aqiData[i][1];
      //向节点oList添加子节点oLi oList.appendChild(oLi); } } })();

思路大同小异,只是在运算速度上要比案例一要慢,原因是含有双重循环,并且环内appendChild重排会引起性能下降。更多详情请戳JS中appendChild()方法。

案例三:

(function () { 
  var chineseNumbers = ["","","","","","","","","",""];
  
  var contentStr = "";
  aqiData.filter(function(element){return element[1] > 60;})
         .sort(function (d1,d2){ return d2[1] - d1[1]; })
         .forEach(function (element,index){
    contentStr += "<li>第" + chineseNumbers[index] + "名:" + element[0] + "" + element[1] + "</li>";    
  });
  
  document.getElementById("aqi-list").innerHTML = contentStr;
  
})();

该案例别样的使用了链式调用,以及使用了ES5新增的array.forEach方法来代替for循环遍历处理数组元素,并使用了element.innerHTML属性一次性改变元素的DOM结构

原文地址:https://www.cnblogs.com/fengxiongZz/p/6785024.html