繁体   English   中英

jQuery中的Array.find方法替代方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM