为什么 lodash _.filter 方法适用于选择选项而不适用于 vanilla js 的过滤方法?

薇薇安无檐小便帽

当我想在选项对象上使用 js es 5 filter 方法时,下面的代码会触发错误

var selectObject = element.querySelector(".selectorClass");
let defaultOption = selectObject .options.filter(option => {
         return option.value === "Wanted Value";
    })[0];

JavaScript 运行时错误:对象不支持属性或方法“过滤器”

但是,如果我使用 _lodash 尝试相同的代码,一切正常

  var selectObject = element.querySelector(".selectorClass");
  var defaultOption = _.filter(selectObject .options, (option: any) => {
         return option.value === "Wanted Value";
  })[0];

您知道为什么以及可能如何在 ecma 脚本 5 中的选择选项上使用过滤器吗?

卢克

在某些情况下,在 DOM 中您会收到一些看起来像数组的东西,但实际上并非如此。所以在你的情况下options是类似数组的,一个HTMLOptionsCollection. 要了解有关这些对象的更多信息,请参阅此问题

要解决此问题,您可以将slice其转换为实际数组

const myOptions = Array.prototype.slice.call(selectObject.options)

https://hackernoon.com/htmlcollection-nodelist-and-array-of-objects-da42737181f9

如果您使用的是 es6,您还可以使用以下内容。

// Spread operator
[...selectObject.options].forEach(callback);

// Array.from()
Array.from(selectObject.options).forEach(callback);

// for...of statement
for (var option of selectObject.options) callback(option);

归功于这个要点

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 Lodash 或 vanilla JS 根据对象键过滤数组的最有效方法是什么?

为什么TreeSet的remove()方法不适用于Integers?

为什么同步方法不适用于多线程

为什么 equals() 方法不适用于线程?

为什么before_filter不适用于显示产品的过滤器列表?(rails4)

为什么django的prefetch_related()仅适用于all()而不适用于filter()?

单击适用于 jQuery 但不适用于 vanilla js

为什么 css 过渡不适用于 js

链表实现上的toString方法不适用于js

为什么此扩展方法适用于泛型而不适用于设置的基本类型?

为什么我的拦截器类不适用于计划方法?

为什么getDeclaredMethod不适用于与instanceof与特定方法有关的参数?

VBA/Excel:为什么 match() 方法不适用于所有“类型”的范围

CSS图像替换:为什么kellum方法不适用于按钮元素?

为什么Java中的toString方法似乎不适用于数组

为什么Finalize方法不适用于自定义类型

为什么我的模型上的猫鼬验证方法不适用于 Joi?

为什么SAM规则不适用于无参数方法

为什么 Tabulator rowTapHold 方法不适用于 iOS 设备?

js 链接不适用于过滤的列表项

为什么我的更改复选框不适用于js文件,但适用于控制台?

为什么Vue.js键修饰符仅适用于`<button>`而不适用于`<div>`?

为什么VUE js中的function不适用于按钮组件,而适用于按钮html标签?

angular js 不适用于选择元素的选项

Hibernate @Filter不适用于Spring JpaRepository.findById方法

为什么CSS过滤器不适用于Chrome中的SVG元素?

为什么过滤器不适用于字符串列表

为什么 GridView 过滤器不适用于我?

为什么 skimage 均值过滤器不适用于浮点数组?