在javascript中过滤数组

时间:2016-08-04 09:10:26

标签: 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},
        ]

有没有办法过滤allCars并只返回carsInCart中的那些,只从allCars返回底盘并从carsInCart中提供?

因此,我想要的是这样的:

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

4 个答案:

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

或者使用函数shorthands:

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

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

答案 2 :(得分: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(),因此无法在网页开发中使用它们。

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