2017-06-23 26 views
1

我有兩個對象,汽車和卡車。每輛汽車和卡車都有一個號碼屬性。然而,每輛車可以有多輛卡車相關,但只有一輛卡車號碼也會與車號相符。找到一個類似的屬性,然後循環通過對象

例子:

car 
{ 
    number: 1054 
} 

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

我想看看是否有跳過通過檢查,看看他們是否有一些共同的屬性,如果是這樣,那麼我想獲得具有嵌套循環的方式附屬於它的屬性。

目前我使用比以下稍複雜的代碼,但想法是用戶正在使用一輛汽車時,他們正在尋找相關的卡車,所以下面的第一個循環是簡化,但想法是相同的。

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

你會說,創建HashMap和然後運行forEach更有效率(更少資源密集型)比Marcin提供的lodash代碼? –

+1

@Smithyyy先生,從長遠來看,是的,因爲用鍵查找對象比查找要快,而查找始終從卡車陣列的開始處開始迭代。 –

+0

感謝您的性能解釋並提供您的答案片段! –

1

當然您也可以使用lodash它

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

您可以使用它像:

_.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 
}); 
相關問題