浏览器支持array.include和其他选项
我查了一下,发现这是关于在一个数组中的较大字符串中查找子字符串的。 Array.Prototype.includes
if (t.title.includes(searchString))
我的t
是$.each
一部分,它遍历更大的对象数组(每个对象从字符串,日期等获取信息的buttload)。 searchString
是用户在框中键入的任何内容。 所有这些都是我在页面上列出的一个简单的搜索功能。
这在Chrome中运行得很好。 但是Firefox和IE都出现了错误
TypeError: currentTicket.title.includes is not a function
因此,我要么提出一个警告标志,指出我的应用只适用于Chrome或我手工查找功能? 奇怪的是,我发布的来自MDN的文档页面指出,只有Firefox支持array.includes
,奇怪的是只有Chrome才能运行它。
考虑使用更广泛支持的方法,比如Array.prototype.indexOf()
(它也支持IE),而不是使用当前标记为“实验性”的API。
而不是t.title.includes(string)
你可以使用t.title.indexOf(string) >= 0
您也可以使用Array.prototype.filter()
来获取满足特定条件的新字符串数组,如下例所示。
var arr = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"];
document.getElementById("input").onkeyup = function() {
document.getElementById("output").innerHTML = arrayContainsString(arr,this.value);
}
document.getElementById("header").innerHTML = JSON.stringify(arr);
function arrayContainsString(array, string) {
var newArr = array.filter(function(el) {
return el.indexOf(string) >= 0;
});
return newArr.length > 0;
}
<input id="input" type="text" />
<br/>
<div>array contains text:<span id="output" />
</div>
<div id="header"></div>
正如您链接到的MDN文章所述,Firefox在夜间版本中只支持.includes
,其他浏览器在文章最后更新时根本不支持它(Chrome可能已被更新为在稍后时间支持它)。 如果你想支持所有浏览器,你可以使用同一篇文章中概述的polyfill:
if (![].includes) {
Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {
'use strict';
var O = Object(this);
var len = parseInt(O.length) || 0;
if (len === 0) {
return false;
}
var n = parseInt(arguments[1]) || 0;
var k;
if (n >= 0) {
k = n;
} else {
k = len + n;
if (k < 0) {k = 0;}
}
var currentElement;
while (k < len) {
currentElement = O[k];
if (searchElement === currentElement ||
(searchElement !== searchElement && currentElement !== currentElement)) {
return true;
}
k++;
}
return false;
};
}
但是,这听起来像是你的问题有更好的解决方案,但很难说没有任何细节。
链接地址: http://www.djcxy.com/p/12867.html