zoukankan      html  css  js  c++  java
  • 数组的filter函数

    filter()遍历注意事项:

      1.未被赋值的元素不会被遍历到 

      2.在遍历开始后添加到数组的元素不会被遍历到

      3.被删除的元素不会被遍历到

      4.在遍历该项之前,可以更改该项值

    1.

    <script>
        var a = [1,2,3];
        a[6] = 10;
        
        console.log(a);//[1, 2, 3, empty × 3, 10]
        
        var obj = {
            suc:"yes",
            fail:undefined
        }
        var result = a.filter(function(value,index){
            if(value === undefined)
                return obj.suc
        },obj);
        console.log(result);//[]
    </script>

    结果为空数组

    虽然a[5]的输出是unfined,但是a[5]作为未被赋值项,不会被filter()遍历

    <script>
        var a = [1,2,3,void 0,4,5,void 0,6,void 0,7];
        
        var obj = {
            suc:"yes",
            fail:undefined
        }
        var result = a.filter(function(value,index){
            if(value === undefined)
                return obj.suc
        },obj);
        console.log(result);
    </script>

     结果:[undefined,undefined,undefined]

    数组未被赋值项的undefined和显式赋值undefined是不同的。这里的3,6,8项会被遍历到

    2.

    <script>
        var a = [1,2,3,4,5,6,7,8,9];
        
        var obj = {
            suc:"yes",
            fail:undefined
        }
        var result = a.filter(function(value,index){
            if(index == 0)a[9] = 10;
            return !(value%2);
        },obj);
        console.log(result);
    </script>

    结果:[2,4,6,8]

    虽然在遍历到第一个元素时,就为数组添加了新元素a[9],但是新元素不会被遍历到。被遍历的元素是遍历开始的时候,数组的一个快照。注意这个快照只关注数组的索引项,而不是索引项值,下面的例子有解释

    3.

    <script>
        var a = [1,2,3,4,5,6,7,8,9];
        
        var obj = {
            suc:"yes",
            fail:undefined
        }
        var result = a.filter(function(value,index){
            if(index == 0)delete a[1];
            return !(value%2);
        },obj);
        console.log(result);
    </script>

    结果:[4,6,8]

    索引号1被删除,不会出现在遍历中

    打印数组a:

    [1, empty, 3, 4, 5, 6, 7, 8, 9]

    4.

    <script>
        var a = [1,2,3,4,5,6,7,8,9];
        
        var obj = {
            suc:"yes",
            fail:undefined
        }
        var result = a.filter(function(value,index){
            if(index == 0)a[1] = 10;
            return !(value%2);
        },obj);
        console.log(result);
    </script>

    结果:[10,4,6,8]

    <script>
        var a = [1,2,3,4,5,6,7,8,9];
        
        var obj = {
            suc:"yes",
            fail:undefined
        }
        var result = a.filter(function(value,index){
            if(index == 3)a[1] = 10;
            return !(value%2);
        },obj);
        console.log(result);
    </script>

    结果:[2,4,6,8]

    某个项值在遍历之后更改,就已经来不及了

  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/bibiafa/p/9389682.html
Copyright © 2011-2022 走看看