JavaScript处于数组中

2020/11/06 05:22 · javascript ·  · 0评论

假设我有这个:

var blockedTile = new Array("118", "67", "190", "43", "135", "520");

有更多的数组元素,但是出于可读性目的,它们很少。无论如何,我可以做一个“ for”循环,但是每次您单击地图时都会做500次循环...还有其他方法可以查看某个字符串是否在数组中吗?

试试这个:

if(blockedTile.indexOf("118") != -1)
{  
   // element found
}

如前所述,如果您的浏览器支持indexOf()那就太好了!如果不是,则需要对其进行pollyfil或依靠lodash / underscore之类的实用工具

只是想添加此更新的ES2016添加(以使此问题保持更新):

Array.prototype.includes()

if (blockedTile.includes("118")) {
    // found element
}
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
}

使用Underscore.js

跨浏览器兼容,如果您的数据已排序,则可以执行二进制搜索。

_。指数

_.indexOf(array,value,[isSorted])返回可以在数组中找到值的索引;如果数组中不存在value,则返回-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');   
}

一些浏览器支持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;
  };
}

只需根据您的口味使用:

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"');
}
<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>

在2019年做到这一点的最佳方法是使用 .includes()

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(1, 2);  // false

第一个参数是您要搜索的。第二个参数是此数组中开始搜索的索引位置。

如果您需要在这里浏览一下-有很多传统的答案。

if(array.indexOf("67") != -1) // is in array

上面已经回答了,但想分享。

虽然不能在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: false

这里有一些参考他们也有上面的Polyfill。

根据可用的JavaScript版本,可以使用indexOf

返回可以在数组中找到给定元素的第一个索引;如果不存在,则返回-1。

some

测试数组中的某些元素是否通过提供的功能实现的测试。

但是,如果您要进行这种存在性检查,则最好使用对象存储字符串(或者根据数据处理对象而选择对象以及数组)。

我将使用其他数据结构,因为数组似乎不是最佳解决方案。

代替数组,将对象用作哈希表,如下所示:

(也发布在jsbin中

var arr = ["x", "y", "z"];
var map = {};
for (var k=0; k < arr.length; ++k) {
  map[arr[k]] = true;
}

function is_in_map(key) {
  try {
    return map[key] === true;
  } catch (e) {
    return false;
  }
}


function print_check(key) {
  console.log(key + " exists? - " + (is_in_map(key) ? "yes" : "no"));
}

print_check("x");
print_check("a");

控制台输出:

x exists? - yes
a exists? - no

这是一个简单的解决方案。如果您更喜欢面向对象的方法,请在Google上搜索“ js hashtable”

恕我直言与旧版浏览器最兼容

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." );

通过将Array副本转换为CSV字符串,可以在较旧的浏览器中测试该字符串。

Why don't you use Array.filter?

var array = ['x','y','z'];
array.filter(function(item,index,array){return(item==YOURVAL)}).

Just copy that into your code, and here you go:

Array.prototype.inArray = function (searchedVal) {
return this.filter(function(item,index,array){return(item==searchedVal)}).length==true
}

in array example,Its same in php (in_array)

 var ur_fit = ["slim_fit", "tailored", "comfort"];
 var ur_length = ["length_short", "length_regular", "length_high"];
    if(ur_fit.indexOf(data_this)!=-1){
        alert("Value is avail in ur_fit array");
    }
    else if(ur_length.indexOf(data_this)!=-1){      
         alert("value is avail in ur_legth array"); 

    }
var myArray = [2,5,6,7,9,6];
myArray.includes(2) // is true
myArray.includes(14) // is false

You can try below code. Check http://api.jquery.com/jquery.grep/

var blockedTile = new Array("118", "67", "190", "43", "135", "520");
var searchNumber = "11878";
arr = jQuery.grep(blockedTile, function( i ) {
  return i === searchNumber;
});
if(arr.length){ console.log('Present'); }else{ console.log('Not Present'); }

check arr.length if it's more than 0 means string is present else it's not present.

I think the simplest way is that :

(118 in blockedTile); //is true 
本文地址:http://javascript.askforanswer.com/javascriptchuyushuzuzhong.html
文章标签:
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!