2017-06-23 4 views
1

私は車とトラックの2つのオブジェクトを持っています。それぞれの車とトラックには番号のプロパティが付いています。ただし、各車には複数のトラックが関連付けられていますが、1つのトラック番号だけが車の番号と一致します。同様のプロパティを探してオブジェクトをループする

例:

car 
{ 
    number: 1054 
} 

truck 
[{ 
    number: 80, 
    type: "pickup", 
},{ 
    number: 1054, 
    type: "extended cab" 
}, { 
    number: 50, 
    type: "flatbed" 
}] 

は、私は、彼らが数プロパティを共有し、その場合は、その後、私が取得したいかどうかをチェックすることで、ネストされたループを持つスキップする方法があるかどうかを確認したいと思いますそれに付随するプロパティ。

現在、私は以下より少し複雑なコードを使用していますが、ユーザーは関連するトラックを探しているときにすでに1台の車で作業しているため、下の最初のループは単純ですが、アイデアは同じです。

for (let i = 0; i < cars.length; i++) { 
    car1 = cars[0].number; 

    for (let j = 0; j < trucks.length; j++) { 
     if (car1 === trucks[j].number) { 
      console.log('Found matching truck'); 
     } 
    } 
} 

私はこれより少なく課税方法があるかどうか、これは私がに固執するべきであるかどうかを知りたいです。

私はプレーンなjavascriptまたはlodashを使用しています。

答えて

2

ハッシュテーブルを使用して、車の番号を単純に検索することができます。

var trucks = [{ number: 80, type: "pickup" }, { number: 1054, type: "extended cab" }, { number: 50, type: "flatbed" }], 
 
    hash = {}; 
 
    
 
trucks.forEach(function (truck) { 
 
    hash[truck.number] = truck; 
 
}); 
 

 
console.log(hash[1054]); 
 
console.log(hash);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

は、あなたが言うだろうとハッシュマップを作成し、 forEachを実行する方が効率的です(少ないリソース集約)を提供していますか? –

+1

@ Mr.Smithyyy、長い間、キー付きのオブジェクトのルックアップはfindより速いので、トラック配列の先頭から常に反復を開始します。 –

+0

パフォーマンスの説明をお寄せいただきありがとうございます。 –

1

確かにあなたはそれが

https://lodash.com/docs/4.17.2#

あなたはそのようにそれを使用することができためlodashを使用することができます。

_.forEach(cars, function(car) { 
    var myTruck = _.find(trucks, function(truck) { return truck.number === car number; }); 
    if(myTruck === undefined) 
    { 
     console.log('not found'); 
    } 
    //do what you like with it 
}); 
関連する問題