如何检查 JavaScript 数组中是否存在某个值?

14

我有一个JavaScript数组,每添加一个新项到数组中都会得到下一个递增的数字。例如:

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

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

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

5个回答

11

类似这样:

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

如果它是false,这对我似乎有效,但如果它是true,它就完全停止工作了。在这个检查中我做错了什么?:if (in_array(ArrayofPeople, 235) == true) { alert("event was in array"); } else { alert("not in array"); } - Oseer
因为您将ID存储为字符串,所以应该执行in_array(arrayofpeople,'235')或者需要从数组的ID属性中删除""。 - Manuel van Rijn
3
哇,将近四年了,竟然没有人提到这段代码无法工作!该代码仅检查第一个元素的id是否等于id参数!将内部循环体的代码改为 if(array[i][0].id === id) return true; - A.Akram

8
你应该遍历数组并手动检查是否有匹配的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;
}

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


1
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);

1
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接