2016-08-04 6 views
0

Ich habe ein Array mit einer Liste aller Autos wie folgt:Filter durch ein Array in 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"} 
    ]; 

und ich habe einige dieser Autos in den Warenkorb, wie folgt:

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

Gibt es eine Möglichkeit, durch allCars zu filtern und nur diejenigen, die in carsInCart sind, und nur Fahrgestelle von allCars und Angebot von carsInCart zurückgeben?

So was ich will, ist so etwas wie diese:

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

Hinweis: Sie scheinen ['const'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const) zu verwenden, wobei [' var'] (https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var) oder ['let'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenz/Statements/let) wäre besser geeignet. Wenn Sie sie verwenden, bedeutet dies, dass Sie möglicherweise nicht sicher sind, wo Sie diese Anweisungen verwenden können. – Makyen

Antwort

1

Versuchen Sie einfach mit:

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

Oder mit Funktionen Kürzel:

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

Ein Wort: Brilliant! :) – 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

Warum der Downvote? –

+0

keine Ahnung warum der Downvote. Beachten Sie, dass das Ergebnis "Ergebnis" ist, nicht "AutosFilter", auch wenn "AutosFilter" beschreibender ist. – Makyen

+1

OP erwähnt jQuery nicht. Ich denke nicht, dass du es benutzen solltest. –

1

bereits.

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

oder noch kürzer mit Destruktive Zuordnung.

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

Verwendung für Schleifen:

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 }); 

     } 

    } 

} 

Edit: .forEach() und .map() werden nicht von allen Browsern noch unterstützt, damit sie nicht in Web-Entwicklung verwendet werden kann.