2017-06-23 25 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 
}); 
相关问题