tro*_*war 6 javascript equivalent
正在寻找"相当于javascript中的某些方法"和"只返回一个值,如果在数组中",但只看到了确定变量类型或太多不必要的方式的答案.
我绕过html中的所有输入,我想要这样的东西:
$('#goodsFilter')
.find('input[type="number"]')
.some(function(i,el){
return (isNumber($(el).val())) ? 1 : 0;
});
Run Code Online (Sandbox Code Playgroud)
但它抛出一个错误:
"TypeError:'undefined'不是函数"(例如Safari 6.0.4).
UPD:错误来自最后一行,是的,在哪里});.ISNUMBER:
function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); }
Run Code Online (Sandbox Code Playgroud)
这应该检查每个输入信息的存在,并且,如果它们中的至少一个不为空,则返回1,否则为0.如何将其替换为在大多数现代浏览器中工作?
UPD:
问题解决了.我在选择答案时有点困惑.@RobG实现的代码.some()对初学者来说更容易理解(我也是),所以我改变了我的投票.
对于参与此线程的任何其他人,您可以通过some()以下方式在jQuery对象上使用:
$.makeArray($(...)).some(function(x) { ... })
Run Code Online (Sandbox Code Playgroud)
jQuery.makeArray()将jQuery对象转换为数组,以便您可以使用some()它.
Array.prototype.some返回true或false,因此您可以执行以下操作:
.some(function(el){
return !isNaN(el.value);
}
Run Code Online (Sandbox Code Playgroud)
你没有说出错误的来源,是从调用isNumber吗?
啊,所以你的问题是有的.
如果你想有一个jQuery的一些方法,那么它至少应该模仿内置的ECMAScript 一些,这需要两个参数:一个回调函数和一个可选的这个说法.
回调函数应该有三个参数:值,索引(可选)和用作此参数的可选值.它应该按升序访问数字成员,并且只访问实际存在的成员.
所以它应该是(注意jQuery.fn === jQuery.prototype):
jQuery.fn.some = function(fn, thisArg) {
var result;
for (var i=0, iLen = this.length; i<iLen; i++) {
if (this.hasOwnProperty(i)) {
if (typeof thisArg == 'undefined') {
result = fn(this[i], i, this);
} else {
result = fn.call(thisArg, this[i], i, this);
}
if (result) return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以,如果你现在想要,你可以这样做:
var result = $('#goodsFilter')
.find('input[type="number"]')
.some(function(el) {
return isNumber(el.value);
})? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
或者您可以执行以下任一操作以将true强制为1,将false强制为0:
var result = Number($('#goodsFilter')
.find('input[type="number"]')
.some(function(el) {
return isNumber(el.value);
}));
Run Code Online (Sandbox Code Playgroud)
要么
var result = +($('#goodsFilter')
.find('input[type="number"]')
.some(function(el) {
return isNumber(el.value);
}));
Run Code Online (Sandbox Code Playgroud)
以上只是经过轻微测试,可选的thisArg参数可能是多余的.
您可以使用该.filter方法,然后检查长度.
$('#goodsFilter')
.find('input[type="number"]')
.filter(function(i,el){ return isNumber($(el).val())); })
.length > 0
Run Code Online (Sandbox Code Playgroud)