使用ES6 JavaScript过滤和组合2个阵列的字段?

时间:2017-09-26 16:03:55

标签: javascript

我有两个数组,一个披萨细节,另一个是订单状态。 id字段是链接它们的内容。所以在这个例子中,订单有2 x Pepperoni和3 x Margarita。

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 
  }
]

2 个答案:

答案 0 :(得分:2)

使用Object.assign而不使用额外的密钥

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

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