在 ES6 中筛选或映射节点列表
2022-08-30 03:03:44
在ES6中过滤或映射节点列表的最有效方法是什么?
根据我的读数,我将使用以下选项之一:
[...nodelist].filter
或
Array.from(nodelist).filter
你会推荐哪一个?有没有更好的方法,例如不涉及数组?
在ES6中过滤或映射节点列表的最有效方法是什么?
根据我的读数,我将使用以下选项之一:
[...nodelist].filter
或
Array.from(nodelist).filter
你会推荐哪一个?有没有更好的方法,例如不涉及数组?
[...nodelist]
如果对象是可迭代的,则将创建一个对象的数组。Array.from(nodelist)
如果对象是可迭代的,或者如果对象是类似数组的(具有和数字道具),则将从对象中生成数组.length
如果存在,则两个示例将完全相同,因为这两个示例都涵盖可迭代。但是,如果您的环境尚未配置为可迭代,则第一个示例将失败,第二个示例将成功。 目前无法正确处理此情况。NodeList.prototype[Symbol.iterator]
NodeList
Babel
因此,如果您的可迭代,那么使用哪种方法实际上取决于您。我可能会根据具体情况进行选择。它的一个好处是,它采用映射函数的第二个参数,而第一个参数必须创建一个临时数组,则不会。但是,如果您没有映射列表,则无关紧要。NodeList
Array.from
[...iterable].map(item => item)
Array.from(iterable, item => item)
TL;DR;
Array.prototype.slice.call(nodelist).filter
slice() 方法返回一个数组。返回的数组是集合的浅副本(NodeList),因此它比Array.from()工作得更快,因此它的工作速度与Array.from()一样快。
原始集合的元素将复制到返回的数组中,如下所示:
关于论点的简短解释
Array.prototype.slice(beginIndex, endIndex)
Array.prototype.slice.call(namespace, beginIndex, endIndex)