[英]Array.find method alternative in jQuery?
我正在使用我之前问这个问题的Array.find方法,并且我已经意识到IE不支持它。 IE是否支持jQuery等效或什至不同的Javascript等效?
var zones = [{ "zone": "one", "zipcodes": ["69122", "69125", "69128", "69129"] }, { "zone": "two", "zipcodes": ["67515", "67516", "67518", "67521"] } ]; $(function() { $('#userZip').submit(function(e) { e.preventDefault(); var userZip = $('input[type="text"]').val(); var zone = zones.find(function(zone) { return zone.zipcodes.indexOf(userZip) > -1; }); alert("Zone: " + zone.zone); }); });
i { display: block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form id="userZip"> <i>Enter zip code "69122" as an example</i> <input type="text" placeholder="zip" /> <input type="submit" /> </form>
IE9 +是否足够支持Array.filter?
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
显然,您可能会获得多个结果,因此,如果您打算这样做,则只需选择第一个。
一个polyfill:
Array.prototype.find = Array.prototype.find || function (callback) {
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i)) {
return this[i];
}
}
};
如果您想要更好的一个,请查看您提供的第一个链接的polyfill部分...
或者,您也可以使用标准的for循环?
var zones = [{ "zone": "one", "zipcodes": ["69122", "69125", "69128", "69129"] }, { "zone": "two", "zipcodes": ["67515", "67516", "67518", "67521"] } ]; function findZone(zns, zip) { var zone = {}; for (var i = 0; i < zns.length; i++) { for (var j = 0; j < zns[i].zipcodes.length; j++) { if (zip === zns[i].zipcodes[j]) { zone = zns[i]; break; } } } return zone; } console.log(findZone(zones, "67515"))
使用jQuery的函数:
$(function() {
$('#userZip').submit(function(e) {
e.preventDefault();
var userZip = $('input[type="text"]').val();
var zone = $.grep(zones, function (element, index) {
if ($.inArray( userZip, element.zipcodes ) > -1) return true;
});
alert("Zone: " + zone[0].zone);
});
});
在这里摆弄: https : //jsfiddle.net/beekvang/p76f1zev/
jQuery.grep
工作方式类似于Array的find
方法,因为它使用提供的函数对类似Array的对象和过滤器进行操作。 结果是一个新数组,其中仅包含那些通过测试的元素。 它还具有一个可选的invert
参数。
例如为您的代码
var filteredZones = $.grep(zones, function(zone) {
return zone.zipcodes.indexOf(userZip) > -1;
});
if (filteredZones.length) {
var zone = filteredZones[0];
}
您可以在此处了解更多信息-http: //api.jquery.com/jquery.grep/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.