一尘不染

如何确定对象是否在数组中

javascript

我需要确定JavaScript中的数组中是否已存在对象。

例如(dummycode):

var carBrands = [];

var car1 = {name:'ford'};
var car2 = {name:'lexus'};
var car3 = {name:'maserati'};
var car4 = {name:'ford'};

carBrands.push(car1);
carBrands.push(car2);
carBrands.push(car3);
carBrands.push(car4);

现在,“carBrands”数组包含所有实例。我现在正在寻找一种快速解决方案,以检查car1,car2,car3或car4的实例是否已经在carBrands数组中。

例如:

var contains =  carBrands.Contains(car1); //<--- returns bool.

car1和car4包含相同的数据,但是不同的实例,应测试它们是否相等。

我是否在创建时向对象添加了哈希值?还是有更快的方法来用Javascript做到这一点。

我正在这里寻找最快的解决方案,如果它很脏,那么它必须是;)在我的应用程序中,它必须处理大约10000个实例。

没有jQuery


阅读 300

收藏
2020-05-01

共1个答案

一尘不染

使用这样的东西:

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] === obj) {
            return true;
        }
    }

    return false;
}

在这种情况下,containsObject(car4,carBrands)是真的。删除carBrands.push(car4);呼叫,它将返回false。如果以后扩展到使用对象来存储其他汽车对象,而不是使用数组,则可以使用如下所示的方法:

function containsObject(obj, list) {
    var x;
    for (x in list) {
        if (list.hasOwnProperty(x) && list[x] === obj) {
            return true;
        }
    }

    return false;
}

这种方法也适用于数组,但是在数组上使用时,比第一种选择要慢一些。

2020-05-01