Javascript 为什么lodash.filter方法适用于选择选项,而不是vanilla js';s过滤法?
当我想在options对象上使用JSES5过滤器方法时,下面的代码会触发一个错误Javascript 为什么lodash.filter方法适用于选择选项,而不是vanilla js';s过滤法?,javascript,ecmascript-5,Javascript,Ecmascript 5,当我想在options对象上使用JSES5过滤器方法时,下面的代码会触发一个错误 var selectObject = element.querySelector(".selectorClass"); let defaultOption = selectObject .options.filter(option => { return option.value === "Wanted Value"; })[0]; JavaScript运行时错误:对象不支持属性或
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中的选择选项上使用filter吗?在VanillaJS中,
filter
只是属于数组的一种方法,因此当您尝试在对象上使用filter
时,您将得到一个错误
在VanillaJS中,filter
只是属于Array
的一种方法,因此当您尝试在对象上使用filter
时,您将得到一个错误
原因是如果lodash是对象,它将自动按关键帧过滤。
试试这个:
Object.keys(selectObject.options).filter( key =>
selectObject.options[key] === 'Wanted Value');
原因是如果lodash是对象,它将自动按关键帧过滤。
试试这个:
Object.keys(selectObject.options).filter( key =>
selectObject.options[key] === 'Wanted Value');
在某些情况下,在DOM中,您将收到一些看起来像数组的东西,但实际上不是。因此,在您的例子中,选项
类似于数组。要了解有关这些对象的更多信息,请参见
要解决此问题,可以将其切片到实际数组中
const myOptions = Array.prototype.slice.call(selectObject.options)
看
如果您使用的是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);
在某些情况下,在DOM中,您将收到看起来像数组的内容,但实际上不是。因此,在您的例子中,选项
类似于数组。要了解有关这些对象的更多信息,请参见
要解决此问题,可以将其切片到实际数组中
const myOptions = Array.prototype.slice.call(selectObject.options)
看
如果您使用的是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);
值得赞扬的是实际上,我们这里讨论的不是对象,而是dom中类似数组的对象。所以在他的例子中,他说的是选项
,它类似于数组,而不是真正的对象。@Luke不能真正理解你所说的类似于数组
,我只知道JSLook into NodeList中有一个有限的基元类型
。可以对它进行迭代,但它不是数组。它被称为类数组,因为它可能实现迭代器@请看,实际上我们在这里讨论的不是对象,而是dom中类似数组的对象。所以在他的例子中,他说的是选项
,它类似于数组,而不是真正的对象。@Luke不能真正理解你所说的类似于数组
,我只知道JSLook into NodeList中有一个有限的基元类型
。可以对它进行迭代,但它不是数组。它被称为类数组,因为它可能实现迭代器@看见