2016-08-04 81 views
0

我有一个阵列的所有汽车列表的数组,如下所示:过滤器通过在JavaScript

const allCars = [ 
     {id: 1, listID: 1, name: "Car 1", chassis: "000000000"}, 
     {id: 2, listID: 2, name: "Car 2", chassis: "111111111"}, 
     {id: 3, listID: 1, name: "Car 3", chassis: "222222222"}, 
     {id: 4, listID: 1, name: "Car 4", chassis: "333333333"} 
    ]; 

和我有一些在购物车中的汽车,具体如下:

const carsInCart = [ 
      {carID: 1, listID: 1, offer: 488}, 
      {carID: 2, listID: 2, offer: 786}, 
     ] 

有没有什么办法可以过滤所有车辆,只返回carsInCart中的车辆,并且只返回来自所有车辆的底盘,并从carsInCart提供?

因此,我想是这样的:

const result = [ 
    {chassis: 000000000, offer: 488}, 
    {chassis: 111111111, offer: 786} 
] 
+0

注意:您似乎使用['const'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const)其中['var'](https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var)或['let'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let)会更合适。使用它们意味着您可能会对使用这些语句的位置有所疑惑 – Makyen

回答

1

与刚刚尝试:

const result = carsInCart.map(function (car) { 
    const aCar = allCars.find(function (c) { 
    return c.id === car.ID; 
    }); 
    return { chassis: aCar.chassis, offer: car.offer }; 
}); 

或者与功能的速记:

const result = carsInCart.map(car => { 
    chassis: allCars.find(c => c.id === car.ID).chassis, 
    offer: car.offer 
}); 
+0

一个字:辉煌! :) – Boky

0
const allCars = [ 
    {id: 1, listID: 1, name: "Car 1", chassis: "000000000"}, 
    {id: 2, listID: 2, name: "Car 2", chassis: "111111111"}, 
    {id: 3, listID: 1, name: "Car 3", chassis: "222222222"}, 
    {id: 4, listID: 1, name: "Car 4", chassis: "333333333"} 
]; 

const carsInCart = [ 
    {carID: 1, listID: 1, offer: 488}, 
    {carID: 2, listID: 2, offer: 786}, 
] 

var carsFilter = []; 

carsInCart.forEach(function(car) { 
    var matchingCar = jQuery.grep(array, function(item) { 
    return item.id == car.carID; 
    })[0]; 

    carsFilter.push({ 
    chassis: matchingCar.chassis, 
    offer: car.offer 
    }); 
}); 

// The result is the object `carsFilter`, if you didn't work that out! 
console.log(carsFilter); 
+0

为什么downvote? –

+0

不知道为什么downvote。注意结果是'result',而不是'carsFilter',即使'carsFilter'更具描述性。 – Makyen

+1

OP没有提到jQuery。我认为你不应该使用它。 –

1

试试这个。

const result = carsInCart.map(carInCart => ({ 
    offer: carIncart.offer, 
    chassis: allCars.find(car => car.id === carInCart.carID).chassis 
})); 

或甚至更短,具有破坏性分配。

const result = carsInCart.map(({carID,offer}) => ({ 
    offer, 
    chassis: allCars.find(({id}) => id === carID).chassis 
})); 
1

使用for循环:

const allCars = [ 
    {id: 1, listID: 1, name: "Car 1", chassis: "000000000"}, 
    {id: 2, listID: 2, name: "Car 2", chassis: "111111111"}, 
    {id: 3, listID: 1, name: "Car 3", chassis: "222222222"}, 
    {id: 4, listID: 1, name: "Car 4", chassis: "333333333"} 
]; 

const carsInCart = [ 
    {carID: 1, listID: 1, offer: 488}, 
    {carID: 2, listID: 2, offer: 786}, 
] 

var result = []; //result goes here 

//for each car 
for(var i = 0; i < allCars.length; i++) { 

    var car = allCars[i]; //current car 

    //for each item in cart 
    for(var k = 0; k < carsInCart.length; k++) { 

     var cartItem = carsInCart[k]; //current cart item 

     //if the current cart ID matches the current cart item ID 
     if(car.id == cartItem.carID) { 

      //its a match, add to result 
      result.push({ chassis: car.chassis, offer: cartItem.offer }); 

     } 

    } 

} 

编辑: .forEach().map()所以他们不能在web开发中使用不被所有的浏览器都支持呢。