2017-09-26 84 views
1

我有2个数组,一个披萨细节,另一个是订单状态。 id字段是什么链接他们。所以在这个例子中,订单有2个辣椒酱和3个玛格丽塔。使用ES6 JavaScript过滤和合并2个数组中的字段?

const pizzaContent = [ 
    { 
    id: 0, 
    name: 'Pepperoni', 
    price: 20, 
    hot: true, 
    stockQuantity: 3 
    }, 
    { 
    id: 1, 
    name: 'Margarita', 
    price: 25, 
    stockQuantity: 3 
    }, 
    { 
    id: 2, 
    name: 'Hawaiian', 
    price: 15, 
    stockQuantity: 0 
    } 
]; 

const orders = [{ 
    id: 0, 
    quantity: 2 
},{ 
    id: 1, 
    quantity: 3 
}]; 

我试图创造出具有从orders数量和pizzaContent领域的一个新的数组。任何不按顺序的比萨饼都不应该成为这个阵列的一部分。

我已经得到接近下列要求:

const pizzasInOrder = this.props.orders.map(order => { 
    return (
    { 
     quantity: order.quantity, 
     pizza: this.props.pizzas.find(pizza => { 
     return (
      order.id === pizza.id 
     ); 
     }) 
    } 
) 
}); 

然而,结果是:

pizzasInOrder = [ 
    { 
    pizza: {id: 0, name: "Pepperoni", price: 20, hot: true, stockQuantity: 3}, 
    quantity:2 
    }, 
    { 
    pizza: {id: 1, name: "Margarita", price: 25, stockQuantity: 3}, 
    quantity:3 
    } 
] 

但我需要的是:

pizzasInOrder = [ 
    { 
    id: 0, name: "Pepperoni", price: 20, hot: true, stockQuantity: 3, quantity: 2 
    }, 
    { 
    id: 1, name: "Margarita", price: 25, stockQuantity: 3, quantity: 3 
    } 
] 
+0

如果ID始终没有洞匹配,则只是有点二的ID和循环反复使用相同的索引来获取匹配的记录。否则,哈希在ID。 –

回答

1

您可以使用Object.assign()将对象合并为一个。

例子..

const pizzaContent = [ 
 
    { 
 
    id: 0, 
 
    name: 'Peperoni', 
 
    price: 20, 
 
    hot: true, 
 
    stockQuantity: 3 
 
    }, 
 
    { 
 
    id: 1, 
 
    name: 'Margarita', 
 
    price: 25, 
 
    stockQuantity: 3 
 
    }, 
 
    { 
 
    id: 2, 
 
    name: 'Hawian', 
 
    price: 15, 
 
    stockQuantity: 0 
 
    } 
 
]; 
 

 
const orders = [{ 
 
    id: 0, 
 
    quantity: 2 
 
},{ 
 
    id: 1, 
 
    quantity: 3 
 
}]; 
 

 
let pizzasInOrder = orders.map((order) => { 
 
    return Object.assign(order, 
 
    pizzaContent.find(pizza => order.id === pizza.id)); 
 
}); 
 

 
console.log(pizzasInOrder);

2

使用Object.assign并且没有额外的键

const pizzasInOrder = this.props.orders.map(order => 
    Object.assign({quantity: order.quantity}, 
     this.props.pizzas.find(pizza => order.id === pizza.id))   
);