此代码使用[].filter.call做什么? 您所在的位置:网站首页 input注解 此代码使用[].filter.call做什么?

此代码使用[].filter.call做什么?

2023-03-10 04:09| 来源: 网络整理| 查看: 265

我正在学习Javascript,并尝试编写对列表进行排序的代码,如果满足某些条件,则将其删除。

我发现此片段似乎很有希望,但不知道它如何工作,因此我可以使其适应我的需求:

list = document.getElementById("raffles-list").children; // Get a list of all open raffles on page list = [].filter.call(list, function(j) { if (j.getAttribute("style") === "") { return true; } else { return false; } });

你们可以通过解释此代码块的功能来帮助我学习吗?

1> jropella..:

它获取“ raffles-list”元素的所有子元素,然后返回包含空“ style”属性的元素的过滤列表。

第一行是不言而喻的-它只是从id为“ raffles-list”的元素中检索孩子。

第二行稍微复杂一些。它利用了两点优势:[]是一个空数组,实际上只是一个具有各种方法/属性的对象,并且等号右侧的逻辑需要在“列表”之前求值。 ”获得新的价值。

使用空白数组以调用“过滤器”方法

告诉过滤器将list用作要过滤的数组,并使用function(j)进行过滤,其中j是要测试的列表中的项目

如果该项目的样式属性为空,即未应用任何样式,则返回true。

编辑:根据OP注释,[]。filter是一个原型,因此从本质上讲,一个对象具有与其他所有对象一样的各种属性。在这种情况下,过滤器是一种方法-请参见此处。通常,您仅指定执行测试的匿名函数/方法,但是此处的作者使用.call来指定任意对象来进行测试。看来这已经内置在标准过滤器方法中,所以我不知道他们为什么这样做。

list.filter无效,因为list是HTMLCollection而不是Array。因此它没有`filter`原型方法。这就是为什么需要创建空数组以便从Array原型中获取filter方法的原因。您无法删除“通话”部分,除非之前已将“ list”转换为“ Array”(例如,“ Array.from(list)” —并非所有浏览器都支持)。这个答案中带有“ [] .filter`是原型”的部分不是很清楚。过滤器是Array.prototype中的_prototype method_。`.call`不是特定于`filter`的。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有