ES6 Массив push и объединить, если значение уже существует - PullRequest
0 голосов
/ 12 июня 2019

Я создаю корзину для покупок на основе рецептов.

this.shoppingCartRecipes.forEach(recipe => {
      recipe.ingredients.forEach(ingredient => {
        this.shoppingCart.push({
          amount: ingredient.amount,
          unit: ingredient.unit,
          name: ingredient.ingredient,
          isDone: ingredient.isDone || false,
          recipeID: recipe.id
        });
      });
    });

Но я хотел бы объединить значения, если имя ингредиента и единица ингредиента совпадают.Есть ли умный способ сделать это?

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Если вы сохраните this.shoppingCart как массив:

this.shoppingCartRecipes.forEach(recipe => {
  recipe.ingredients.forEach(ingredient => {
    const shoppingCartIngredient = this.shoppingCart.find( item => (
      (item.name === ingredient.ingredient) && (item.unit === ingredient.unit)
    ))

    // If the ingredient exists, just update it
    if (shoppingCartIngredient) {
      shoppingCartIngredient.amount = ingredient.amount;
      shoppingCartIngredient.isDone = ingredient.isDone || false;
      shoppingCartIngredient.recipeID = recipe.id;
    } else {
      // Otherwise create a new record
      this.shoppingCart.push({
        amount: ingredient.amount,
        unit: ingredient.unit,
        name: ingredient.ingredient,
        isDone: ingredient.isDone || false,
        recipeID: recipe.id
      });
    }
  });
});
1 голос
/ 12 июня 2019

Вы можете использовать библиотеку `lodash ':

используйте _.uniq(array); или _.uniqBy(array); после нажатия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...