找到一个类似的属性然后循环对象

时间:2017-06-23 09:26:43

标签: javascript lodash

我有两个物品,汽车和卡车。每辆汽车和卡车都附有一个数字属性。但是,每辆车可以有多辆与之相关的卡车,但只有一个卡车号码也与车号相匹配。

示例:

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 个答案:

答案 0 :(得分: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; }

答案 1 :(得分: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
});