Javascript 如何使用jQuery map()比较布尔值
我将jQuery选择器作为一个参数和一个年份值传递给一个函数,以根据我的select(jQuery选择器参数)中所有值的数组测试该值。如果任何选项值与“value”参数相同,但它总是返回未定义的值,我需要它返回布尔trueJavascript 如何使用jQuery map()比较布尔值,javascript,jquery,Javascript,Jquery,我将jQuery选择器作为一个参数和一个年份值传递给一个函数,以根据我的select(jQuery选择器参数)中所有值的数组测试该值。如果任何选项值与“value”参数相同,但它总是返回未定义的值,我需要它返回布尔true function checkOptions(selector, prop) { var options = selector.children('option'); var selectorValues = $.m
function checkOptions(selector, prop) {
var options = selector.children('option');
var selectorValues = $.map(options, function(option) {
if( option.value == prop ){
return !!(option.value == prop);
}
});
}
function checkOptions(selector, prop) {
var result;
var options = selector.children('option');
var selectorValues = $.map(options, function(option) {
return option.value == prop;
});
}
在更改我的原始代码以反映所提出的建议之后,该函数仍然返回“undefined”
变量“selectorValues”在运行时保存这些值:
selectorValues = [false, false, true, false, false]
这是有道理的,因为我正在通过一个“年”来支持选择选项的值之一。在这种情况下,映射函数没有正确使用,这就是您遇到麻烦的原因。它的作用是为数组的每个元素应用转换。看看这本书。这是一个预定义的javascript函数,它完全满足您的需要 我将获取jquery对象的“数组”,将它们转换为一个本机javascript数组,并在其上调用some方法来检查所需的条件
function checkOptions(selector, prop) {
var options = selector.find('option').toArray();
var result = options.some(function(currentValue) {
return (currentValue.text == prop); //using type coercion
});
return result;
}
好吧,假设
如果
条件从未通过,那么您永远不会得到返回
,因此您只能得到未定义的
。如果只想返回所有布尔值,可以删除If
。您还可以删除代码>因为该检查已返回boolean@vlaz,如果所有返回都未定义,map不应该返回空数组吗?@valarauko不,你为什么这么认为?.map
功能提供了一个值到另一个值的映射,这也许并不奇怪。因此,一个包含N个值的数组将生成一个包含N个值的新数组,这些值遵循映射。或者换句话说,如果从[1,2,3]
开始,映射为x*2
,将针对每个值执行,新数组将为[2,4,6]
。您无法使用此参数创建空数组—它始终是1:1。您可能正在考虑使用.filter
,它接受一个谓词并返回通过它的任何内容。等等,是否希望检查选项
返回一个值?如果是这样,它当前没有return
语句,因此它不会返回任何内容-同样,这会导致数组映射函数上的undefined
@vlaz,正如在本机javascript上实现的那样,但是根据jQuery.map文档,您可以返回null或undefined以删除该项(我不知道他们为什么那样实施)这里是链接