我有一个包含所有汽车列表的数组,如下所示:
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}
]
答案 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);