tes*_*est 133 javascript
假设我有这个:
var blockedTile = new Array("118", "67", "190", "43", "135", "520");
Run Code Online (Sandbox Code Playgroud)
有更多的数组元素,但为了便于阅读,这些元素很少.无论如何,我可以做一个"for"循环但每次点击地图时它会做500个循环...有没有其他方法可以查看某个字符串是否在数组中?
Bal*_*a R 223
试试这个:
if(blockedTile.indexOf("118") != -1)
{
// element found
}
Run Code Online (Sandbox Code Playgroud)
Kut*_*yel 42
如前所述,如果您的浏览器支持indexOf(),太棒了!如果没有,你需要pollyfil它或依赖实用带如lodash /下划线.
只是想添加这个更新的ES2016添加(为了更新此问题):
if (blockedTile.includes("118")) {
// found element
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 13
2019 年最好的方法是使用 .includes()
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(1, 2); // false
Run Code Online (Sandbox Code Playgroud)
第一个参数是您要搜索的内容。第二个参数是该数组中开始搜索的索引位置。
如果您需要在这里浏览 - 有很多遗留答案。
小智 12
function in_array(needle, haystack){
var found = 0;
for (var i=0, len=haystack.length;i<len;i++) {
if (haystack[i] == needle) return i;
found++;
}
return -1;
}
if(in_array("118",array)!= -1){
//is in array
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*one 12
它符合跨浏览器标准,并且如果您的数据已排序,则可以执行二进制搜索.
_.indexOf(array,value,[isSorted])返回可在数组中找到值的索引,如果数组中不存在值,则返回-1.使用本机indexOf函数,除非它丢失.如果您正在使用大型数组,并且您知道该数组已经排序,则为isSorted传递true以使用更快的二进制搜索.
//Tell underscore your data is sorted (Binary Search)
if(_.indexOf(['2','3','4','5','6'], '4', true) != -1){
alert('true');
}else{
alert('false');
}
//Unsorted data works to!
if(_.indexOf([2,3,6,9,5], 9) != -1){
alert('true');
}else{
alert('false');
}
Run Code Online (Sandbox Code Playgroud)
ale*_*lex 11
一些浏览器支持Array.indexOf().
如果没有,你可以Array通过它的原型增强对象,就像这样......
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(searchElement /*, fromIndex */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (len === 0)
return -1;
var n = 0;
if (arguments.length > 0)
{
n = Number(arguments[1]);
if (n !== n) // shortcut for verifying if it's NaN
n = 0;
else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
if (n >= len)
return -1;
var k = n >= 0
? n
: Math.max(len - Math.abs(n), 0);
for (; k < len; k++)
{
if (k in t && t[k] === searchElement)
return k;
}
return -1;
};
}
Run Code Online (Sandbox Code Playgroud)
来源.
只需根据您的口味使用:
var blockedTile = [118, 67, 190, 43, 135, 520];
// includes (js)
if ( blockedTile.includes(118) ){
console.log('Found with "includes"');
}
// indexOf (js)
if ( blockedTile.indexOf(67) !== -1 ){
console.log('Found with "indexOf"');
}
// _.indexOf (Underscore library)
if ( _.indexOf(blockedTile, 43, true) ){
console.log('Found with Underscore library "_.indexOf"');
}
// $.inArray (jQuery library)
if ( $.inArray(190, blockedTile) !== -1 ){
console.log('Found with jQuery library "$.inArray"');
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Run Code Online (Sandbox Code Playgroud)
上面已经回答了,但想分享。
虽然不会在 IE 中工作。感谢您提及@Mahmoud
var array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: falseRun Code Online (Sandbox Code Playgroud)
在这里得到了一些参考。他们还有上面的 Polyfill。
恕我直言,与旧版浏览器最兼容
Array.prototype.inArray = function( needle ){
return Array(this).join(",").indexOf(needle) >-1;
}
var foods = ["Cheese","Onion","Pickle","Ham"];
test = foods.inArray("Lemon");
console.log( "Lemon is " + (test ? "" : "not ") + "in the list." );Run Code Online (Sandbox Code Playgroud)
通过将数组副本转换为 CSV 字符串,您可以在旧版浏览器中测试该字符串。
假设您仅使用数组进行查找,则可以使用 Set ( ES6 中引入),它允许您在 O(1) 中查找元素,这意味着查找是次线性的。.includes()使用和 的传统方法,如果指定的项在数组中不存在(或者是最后一项),.indexOf()您可能仍然需要查看数组中的所有 500 个(即:N )元素。这可能效率很低,但是,在 Set 的帮助下,您不需要查看所有元素,而是立即检查该元素是否在您的集合内:
const blockedTile = new Set(["118", "67", "190", "43", "135", "520"]);
if(blockedTile.has("118")) {
// 118 is in your Set
console.log("Found 118");
}Run Code Online (Sandbox Code Playgroud)
如果由于某种原因需要将集合转换回数组,可以通过使用Array.from()或扩展语法 (...)来实现,但是,这将迭代整个集合的内容(其中将是 O(N))。集合也不保留重复项,这意味着您的数组不会包含重复项。
| 归档时间: |
|
| 查看次数: |
183044 次 |
| 最近记录: |