【问题标题】:How to check if value exists in this JavaScript array?如何检查此 JavaScript 数组中是否存在值?
【发布时间】:2011-12-06 02:47:17
【问题描述】:

我有一个 JavaScript 数组,其中添加到数组中的每个新项目都会获得下一个增量数字。一个例子如下(我希望我写得正确):

ArrayofPeople[0] = [{"id": "529", "name": "Bob"}];
ArrayofPeople[1] = [{"id": "820", "name": "Dave"}];
ArrayofPeople[2] = [{"id": "235", "name": "John"}];

数组名为ArrayofPeople,为每个人存储多个数据点。

我需要知道数组中是否存在 id 为 820 的元素。这将如何实现?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    您应该遍历数组并手动检查您是否有匹配的 id:

    function getPersonById(id){
        for(var i=0,l=ArrayofPeople.length;i<l;i++)
           if(ArrayofPeople[i][0].id == id)
               return ArrayofPeople[i];
        return null;
    }
    

    当然,这是非常低效的。我建议你将你的对象存储到一个由人的 id 索引的关联数组(也就是一个对象)中。然后,对具有特定 id 的人的访问是立即的,因为对象只不过是哈希表:

    ArrayofPeople = {};
    ArrayofPeople[529] = {"id": "529", "name": "Bob"};
    ArrayofPeople[820] = {"id": "820", "name": "Dave"};
    ArrayofPeople[235] = {"id": "235", "name": "John"};
    
     function getPersonById(id){
       return id in ArrayofPeople
           ? ArrayofPeople[id]
           : null;
    }
    

    【讨论】:

      【解决方案2】:

      类似这样的:

      function in_array(array, id) {
          for(var i=0;i<array.length;i++) {
              return (array[i][0].id === id)
          }
          return false;
      }
      
      var result = in_array(ArrayofPeople, 235);
      

      【讨论】:

      • 如果它是假的,这似乎对我有用,但如果它是真的,它完全停止工作。我在这个检查中做错了什么?:if (in_array(ArrayofPeople, 235) == true) { alert("event was in array"); } else { alert("not in array"); }
      • 因为您将 id 存储为字符串,所以您应该使用 in_array(arrayofpeople, '235') 或者您需要从数组中的 id 属性中删除“”
      • 哇,快 4 年了,没有人提到这段代码不起作用!代码只会检查第一个元素的 id 是否等于 id 参数!将内部循环的主体更改为if(array[i][0].id === id) return true;
      【解决方案3】:
      ArrayofPeople = new Array();
      ArrayofPeople[0] = [{"id": "529", "name": "Bob"}];
      ArrayofPeople[1] = [{"id": "820", "name": "Dave"}];
      ArrayofPeople[2] = [{"id": "235", "name": "John"}];
      
      var str = '820';
      var is_found = 'not found';
      for(item in ArrayofPeople){
          target = ArrayofPeople[item][0];
          if(target['id'] === str)
              is_found = 'found';
      }
      alert(is_found);
      

      【讨论】:

        【解决方案4】:

        您可以使用相对较新的Array.prototype.some() 来查找项目是否存在(文档中提供了垫片):

        var ArrayofPeople = [];
        ArrayofPeople[0] = [{"id": "529", "name": "Bob"}];
        ArrayofPeople[1] = [{"id": "820", "name": "Dave"}];
        ArrayofPeople[2] = [{"id": "235", "name": "John"}];
        
        function in_array(array, id) 
        {
            return array.some(function(item) {
                return item[0].id === id;
            });
        }
        
        console.log(in_array(ArrayofPeople, '820')); // true

        【讨论】:

          【解决方案5】:
          function IsIdInArray(array, id) {
            for (var i = 0; i < array.length; i++) {
              if (array[i].id === id)
                return true;
            }
            return false;
          }
          
          var result = IsIdInArray(ArrayofPeople, 820);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-10
            • 2021-01-28
            • 2016-09-24
            • 2015-01-18
            • 1970-01-01
            • 2011-01-27
            • 1970-01-01
            相关资源
            最近更新 更多