1. ホーム
  2. ジャバスクリプト

[解決済み】オブジェクトが配列にあるかどうかを判断する方法

2022-04-05 03:33:50

質問

javascriptで配列にオブジェクトがすでに存在するかどうかを判断する必要があります。

例えば(ダミーコード)。

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でこれを行うより速い方法があるのでしょうか?

私はここで最速の解決策を探しています。) 私のアプリでは、約1000000のインスタンスを処理する必要があります。

jqueryなし

解決するには?

このようなものを使ってください。

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

この方法は配列に対しても有効ですが、配列に対して使用した場合、最初のオプションよりも若干遅くなります。