相当于javascript或jquery中的.some()方法
Working equivalent for method .some() in javascript or jquery?
正在寻找"javascript中某些方法的等效"answers"如果在数组中只返回一个值",但只看到了确定变量类型或太多不必要的方式的答案。
我绕过html中的所有输入,我想要这样的东西:
$('#goodsFilter')
.find('input[type="number"]')
.some(function(i,el){
return (isNumber($(el).val())) ? 1 : 0;
});
但是会抛出错误:
"TypeError: 'undefined'不是一个函数"(例如:Safari 6.0.4)。
UPD: Error来自最后一行,是的,其中});
。isNumber:
function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); }
这将检查每个输入信息是否存在,如果其中至少有一个不为空,则返回1,否则返回0。我如何替换它以在大多数现代浏览器中工作?
乌利希期刊指南:问题解决了。我在选择答案时有点困惑。@RobG实现.some()
的代码对于初学者(和我)来说更容易理解,所以我改变了我的投票。
对于其他来到这个线程的人,您可以使用some()
在jQuery对象上:
$.makeArray($(...)).some(function(x) { ... })
jQuery.makeArray()
将jQuery对象转换为数组,因此您可以在其上使用some()
。
根据@alf-eaton的建议,您可以使用:
$(…).toArray().some(function(node) { … })
Array.prototype。有些返回真或假,所以你可以这样做:
.some(function(el){
return !isNaN(el.value);
}
你没有说错误来自哪里,它是从调用isNumber吗?
编辑
啊,所以你的问题是关于一些。如果你想要一个jQuery some方法,那么它至少应该模仿内置的ECMAScript some,它接受两个参数:一个回调函数和一个可选的this参数。
回调函数应该接受三个参数:值、索引(可选)和用作this参数的可选值。它应该按升序访问数字成员,并且只访问实际存在的成员。
所以它应该类似于(注意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;
}
如果你想,现在你可以输入:
var result = $('#goodsFilter')
.find('input[type="number"]')
.some(function(el) {
return isNumber(el.value);
})? 1 : 0;
或者您可以执行以下任意一种操作来强制true为1,并强制false为0:
var result = Number($('#goodsFilter')
.find('input[type="number"]')
.some(function(el) {
return isNumber(el.value);
}));
或
var result = +($('#goodsFilter')
.find('input[type="number"]')
.some(function(el) {
return isNumber(el.value);
}));
以上只是简单的测试,可选的thisArg参数可能是多余的。
您可以使用.filter
方法,然后检查长度
$('#goodsFilter')
.find('input[type="number"]')
.filter(function(i,el){ return isNumber($(el).val())); })
.length > 0
$(...).is(function)
应该也可以。jQuery API文档声明(强调我的):
根据选择器、元素或jQuery对象检查当前匹配的元素集,如果这些元素中至少有一个与给定参数匹配, 返回true。
使用问题中的例子,我们会有这样的内容:
var result = $('#goodsFilter')
.find('input[type="number"]')
.is(function(idx, el) {
return isNumber(el.value);
})? 1 : 0;
。在最基本的版本中,你可以创建一个"some"函数:
function eSome(arr, f) { var i = 0, n = arr.length;
for (;i<n;i++) { if (!i in arr) { continue }
if (f(i, arr[i])) { return true; }
} return false;
}
var list = [0, 1, 2, 3, 4, 5];
var testFunction = function (i, e) { return e === 2; };
console.log(eSome(list, testFunction));
//returns true and the loop ran only for the necessary three times.
。如果您想在jQuery对象中链接.some
调用,您也可以将其添加为jQuery函数,使用如下示例(现已测试并修复):
jQuery.fn.some = function (f) { var i = 0, n = this.length;
for (;i<n;i++) { if (!i in this) { continue }
if (f(i, this[i])) { return true; }
}
return false;
}
$('.a').some(function (i, el) { return ($(el).text() == 'weeee!'); });
。正如@RobG在评论中指出的那样,本机Array.prototype.some
实现使用一组不同的参数调用回调。我遵循OP的示例代码,但您可以在循环内使用if (f(this[i], i, this)) { return true; }
模拟ECMA实现的参数。
。您也可以在Array.prototype.some
上填充它,但我强烈建议不要直接修改内置原型。
香草Javascript实现(带有箭头语法)
function some(arr,callback){
for(let i=0;i<arr.length;i++){
if(callback(arr[i],i,arr)){
return true;
}
}
return false;
}
一些使用:
检查数组是否为偶数:
function hasEvenNum(arr){
return arr.some(value=>{
return value % 2 === 0;
});
}
尝试使用[].prototype.call
方法,第一个参数将是一个类似数组的值,第二个参数是一个将在每个元素上调用的函数。
[].some.call($('#goodsFilter').find('input[type="number"]'), function (el) {
return isNumber($(el).val());
});
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- toLocaleDateString和toLocaleString方法不尊重机器时区
- 查看是否定义了复杂对象变量(objectVar.some.other.value)的简单方法
- 相当于javascript或jquery中的.some()方法
- 数组方法"some"的使用:收到意外的结果