【问题标题】:Why does filter removes index 0 from my array为什么过滤器会从我的数组中删除索引 0
【发布时间】:2020-12-13 17:50:13
【问题描述】:

我只是想确认一些困扰我的事情。

我还在学习 javascript,今天做了一个挑战。 挑战是删除每个第二个索引的值。

我不得不使用过滤器作为挑战的一部分,并在下面的代码中实现 index2 不会从原始数组中返回索引 0,从而切断值“a”。所以我通过向每个索引(index2 +1)添加 1 来让它工作。它是否删除了 0,因为 filter() 总是返回 true 而 0 被视为 false?抱歉,我知道这可能是一个简单的答案,感谢任何抽出时间帮助我的人。

const nums = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
const index = 3;

const extractEachKth=(nums, index)=>nums.filter((item,index2)=>(index2 +1)%index!==0)

expected result ["a", "b", "d", "e", "g", "h", "j"]```

【问题讨论】:

    标签: javascript arrays indexing filter


    【解决方案1】:

    这个说法是错误的, filter() always returns true。相反,过滤器将让这些值通过我们为其返回 true 的过滤器。在您的情况下,如果(index2 +1)%index!==0,您将返回 true。

    当 index2 == 0 时,(index2 +1)%index!==0 => (0+1)%3 !== 0 => 1 !== 0 这是真的。因此它让数组中的第 0 项通过过滤器。

    在您不向 index2 添加 +1 之前,

    当 index2 == 0 时,index2%index!==0 => 0%3 !== 0 => 0!== 0 这是错误的。因此它过滤了第 0 个项目,而您没有得到该项目。

    【讨论】:

    • 好的,谢谢,我想我明白了。所以基本上因为 0 在过滤条件下是假的,它不会在索引上返回 0 除非我添加 +1 这会使其成为真的?
    • 感谢您的帮助,非常感谢。
    【解决方案2】:

    您可以查看想要的索引,添加一个并取三个想要的 k 的剩余部分。

    结果是 1、2(均为 truthy)或零(这是 falsy)的数字。

    如果将此值转换为布尔值,您将得到一个和两个true 和零false

    const
        nums = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
        //       0    1         3    4         5    6         7  wanted indices
        //       1    2    3    4    5    6    7    8    9   10  all index + 1
        //       1    2    0    1    2    0    1    2    0    1  sum % 3
        //       *    *         *    *         *    *         *  take this truthy values
        extractEachKth = (nums, k) => nums.filter((_, index) => (index + 1) % k);
    
    
    console.log(...extractEachKth(nums, 3)); ["a", "b", "d", "e", "g", "h", "j"]

    【讨论】:

    • 这真的很有帮助,因为我一直在尝试做类似的事情,它确认它将 1 添加到 0 以使其通过。谢谢你把它放在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多