资讯专栏INFORMATION COLUMN

IFE JS练习(二|三) 数组的sort,forEach,slice和filter方法

Aomine / 548人阅读

摘要:返回表示保留该元素通过测试,则不保留。否则,的值在非严格模式下将是全局对象,严格模式下为。索引数组中正在处理的当前元素的索引。当执行回调函数时用作的值参考对象。是数组组所以要带,用转换为数值类型。

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

/*
    在注释下方编写代码
    遍历读取aqiData中各个城市的数据
    将空气质量指数大于60的城市显示到aqi-list的列表中
*/
         
var aqiUl = document.getElementById("aqi-list");
    var city = aqiData.filter(function (a) {   //参数a等于aqiData[a]
        return a[1] > 60;                 //判断数组中数字大于60
    });
    city.sort(function (a,b) {
        return b[1] - a[1];
    });
    (function write(){
        city.forEach(function(v,i,a) { //参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组
        var li = document.createElement("li");
        aqiUl.append(li);
        li.innerHTML = "第" + (i + 1) + "名" + v[0] + "," + v[1];
    });
})();
解题思路

1.使用filter方法获取空气质量大于60的城市
2.使用sort方法将空气质量大于60的城市排序
3.使用forEach方法将数组元素遍历到追加到

    的innerHTML中

    解题思路总结
    1.使用filter方法获取空气质量大于60的城市
    //不使用filter方法
    var city = [];
    for(var i = 0; i < aqiData.length; i++){
        if(aqiData[i][1] > 60){
            city.push(aqiData[i][1]);
        }
    }
    
    //使用filter方法
    var city = aqiData.filter(function (a) {   
    //参数a等于aqiData[i],当前的元素的值
        return a[1] > 60;                 
        //filter为数组每个元素调用一次callback,判断数组中数字大于60
    });
    Array.prototype.filter()

    filter 用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组

    语法:var new_array = arr.filter(callback[, thisArg])

    参数

    callback
    用来测试数组的每个元素的函数。调用时使用参数 (element, index, array)
    返回true表示保留该元素(通过测试),false则不保留。
    thisArg
    可选。执行 callback 时的用于 this 的值。
    返回值
    一个新的通过测试的元素的集合的数组

    描述

    filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或 等价于 true 的值 的元素创建一个新数组。callback 只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用。那些没有通过 callback 测试的元素会被跳过,不会被包含在新数组中。

    callback被调用时传入了三个参数
    1.元素的值
    2.元素的索引
    3.被遍历的数组
    如:

    //参数a等于aqiData[i],当前元素的值
    //参数b等于i,当前元素的索引(下标)
    //参数c等于aqiData,整个数组
    var city = aqiData.filter(function (a,i,v) {   
        return a[1] > 60;                 
        console.log(a[1]) //90,50,10,50,90,100
        console.log(aqiData[i][1]) //90,50,10,50,90,100
        console.log(v[i][1])  //90,50,10,50,90,100
    });

    如果为 filter 提供一个 thisArg 参数,则它会被作为 callback 被调用时的 this 值。否则,callback 的 this 值在非严格模式下将是全局对象,严格模式下为 undefined。

    2.使用sort方法将空气质量大于60的城市排序
    //不使用sort方法
    function swap(arr,index1,index2){
        var temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }
    
    var arr = city,i,j;
    //冒泡排序
    for(j = 0; j < arr.length; j++){
        for(i = 0; i < arr.length - j; i++){
            if(arr[i] > arr[i+1]){
                swap(arr,i,i+1);
            }
        }
    }
    
    //使用sort方法
    city.sort(function (a,b) {
        return b[1] - a[1];
    });
    Array.prototype.sort()

    sort() 方法在适当的位置对数组的元素进行排序,并返回数组。 sort 排序不一定是稳定的。默认排序顺序是根据字符串Unicode码点。

    语法: arr.sort() arr.sort(compareFunction)

    描述

    如果是a - b就按照升序排列 [1,2,3]
    如果是b - a就按照降序排列[3,2,2]

    city.sort(function (a,b) {
        return b[1] - a[1]  // 100,90,90
        return a[1] - b[1]  //90,100,100
    });
    3.使用forEach方法将数组元素遍历到追加到
      的innerHTML中
    (function write(){
        //参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组
            city.forEach(function(v,i,a) { 
            var li = document.createElement("li");
            aqiUl.append(li);
            li.innerHTML = "第" + (i + 1) + "名" + v[0] + "," + v[1];
        });
    })();
    语法:
    array.forEach(callback(currentValue, index, array){
        //do something
    }, this)
    array.forEach(callback[, thisArg])
    参数

    callback
    为数组中每个元素执行的函数,该函数接收三个参数:

    currentValue(当前值)
    数组中正在处理的当前元素。

    index(索引)
    数组中正在处理的当前元素的索引。

    array
    forEach()方法正在操作的数组。

    thisArg可选
    可选参数。当执行回调 函数时用作this的值(参考对象)。

    //此时的city是已经筛选完排好序
    //参数为一个回调函数,回调函数有三个参数:当前元素,元素索引,整个数组
    //参数a等于city[i],当前元素的值
    //参数b等于i,当前元素的索引(下标)
    //参数c等于city,整个数组
    city.forEach(function(v,i,a) { 
        var li = document.createElement("li");
        aqiUl.append(li);
        li.innerHTML = "第" + (i + 1) + "名" + v[0] + "," + v[1];
        console.log(v[1]) //100,90,90
        console.log(city[i][1]) //100,90,90
        console.log(a[i][1])  //100,90,90
    });
    获取二维数组

    这里有一段HTML,要怎么获取它并存入一个二维数组呢

    
    
    • 北京空气质量:90
    • 上海空气质量:70
    • 天津空气质量:80
    • 广州空气质量:50
    • 深圳空气质量:40
    • 福州空气质量:32
    • 成都空气质量:90

    1.首先我们先创建个一维数组并获取到所有的li
    2.通过for循环遍历所有的li并且将每个li中的城市和空气存入新数组我们将通过slice()方法来实现

    var source = document.getElementById("source").getElementsByTagName("li");
    var data = new Array();  //创建一个一维数组
    for(var i = 0; i < source.length; i++){
        var data[i] = new Array(); //此时是个二维数组
        //这里通过slice将li中前两位字符截取并存入数组中
        //因为innerHTML都是string类型,利用slice裁剪字符串。
        data[i][0] = source[i].innerHTML.slice(0,2);    
        //getElementsByTagName("b")是数组组所以要带[0],用Number转换为数值类型。
        data[i][1] = Number(source[i].getElementsByTagName("b")[0].innerHTML);
            
    }
    总结:

    filter 方法用于数组筛选
    sort 方法用于数组排序
    forEach 方法用于数组遍历
    slice 方法用于截取
    Number 方法转换数值类

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82295.html

相关文章

  • JavaScript30秒, 从入门到放弃之Array(四)

    摘要:使用把指定运算结果为的数组元素添加到二维数组的第一个数组中,运算结果为的数组元素添加到二维数组的第二个数组中。所以改成了,它是不改变数组元素的,没有副作用,不干扰后续。方法将剩余的所有数组元素以的方式返回结果数组。 原文地址:JavaScript30秒, 从入门到放弃之Array(四)博客地址:JavaScript30秒, 从入门到放弃之Array(四) 水平有限,欢迎批评指正 ma...

    wuaiqiu 评论0 收藏0
  • js操作

    摘要:日期格式转换将国际标准格式转换为年月日将日期格式将日期格式转为练习将国际标准时间转换成年月日创建一个日期分别获取年月日的值将年月日的值拼接成指定格式模版字符串什么时候会用到思考模版字符串使用场景字符串里解析变量函数表达式多行特殊符号转义 20170521 日期格式转换 将国际标准格式转换为年/月/日 将日期格式将日期格式20/05/2017 转为 2017-05-20 练习1 fo...

    tianren124 评论0 收藏0
  • 深入了解JS数组常用方法

    摘要:数组作为一种重要的数据类型,除了基础的几个方法外,还有很多实用的方法也是我们的必备技能。原数组不会改变。详细语法请参考让每个人都干点啥方法对数组的每个元素执行一次提供的函数,该方法没有返回值。 数组作为一种重要的数据类型,除了基础的 pop、push、shift、unshift 几个方法外,还有很多实用的方法也是我们的必备技能。 假设我们有一队人,如下图:showImg(https:/...

    ningwang 评论0 收藏0
  • JavaScript 数组操作方法小结

    摘要:使用方法返回值返回一个新的数组,包含从到不包括该元素的中的元素接受一或两个参数,即要返回项的起始和结束位置。用于执行每个数组元素的函数。新增的方法使用方法返回值返回新的被替换的数组方法用于将一个固定值替换数组的元素。 ECMAScript为操作已经包含在数组中的项提供了很多方法。这里本人总结一下自己对这些方法的理解,如此之多的方法中,我首先已是否会改变原数组做为分类标准,逐个解释一下每...

    tinysun1234 评论0 收藏0
  • 刷题——Codewars Js题目(持续更新)

    摘要:发现一个很好的练习做题网站都是自己做过的,先放自己的答案,再放自己觉得不错的其他回答。 发现一个很好的练习做题网站 Codewars 都是自己做过的,先放自己的答案,再放自己觉得不错的其他回答。 1. 将首字母放到后面并加上ay pigIt(This is my string)转换成:pigIt(hisTay siay ymay tringsay) mine function...

    toddmark 评论0 收藏0

发表评论

0条评论

Aomine

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<