Замените значение bool in объекта внутри объекта значением массива

#javascript

#javascript

Вопрос:

Я пытался выяснить, как это сделать, в течение нескольких часов и idk, почему я так потерян.

Я пытаюсь заменить значение из начинок для каждого пирога в объекте pies на красивые имена из массива toppings .

Я изо всех сил пытаюсь объяснить это без примера (пожалуйста, смотрите Ниже).

т.е. {Взбитые сливки: true} => {«Взбитые сливки»}

 const toppings = ["Whipped cream", "Powdered sugar"]

const pies = [
{
        name: "Cherry Pie",
        toppings: 
        {
                whippedCream: true, 
                powderedSugar: true
        }
},{
        name: "Blueberry Pie",
        toppings: 
        {
                whippedCream: true,
        }
}]

 

Я был бы очень признателен за любую помощь, которую вы можете предоставить в этом.

Редактировать: начинки = [{имя: «Взбитые сливки»}, {имя: «Сахарная пудра»}]

Комментарии:

1. {"Whipped cream"} недопустимый синтаксис — для объектов требуются пары ключ-значение, а не только значения

2. Хорошо, допустим, мы создаем toppings = [{name: «Взбитые сливки»}, {name: «Сахарная пудра»}], тогда как бы я это сделал?

Ответ №1:

Вам понадобится объект поиска для перевода ваших начинок в верблюжьем стиле в формат pretty:

 const toppingsLookup = {
  whippedCream: "Whipped cream",
  powderedSugar: "Powdered sugar"
}
 

Теперь вы действительно можете выполнить поиск. Вы можете сделать это с предоставленным вами массивом следующим образом:

 const toppingsLookup = {
  whippedCream: "Whipped cream",
  powderedSugar: "Powdered sugar"
};

const pies = [{
    name: "Cherry Pie",
    toppings: { whippedCream: true, powderedSugar: true }
  }, {
    name: "Blueberry Pie",
    toppings: { whippedCream: true }
}];

const formatted = pies.map(pie => {
  const toppings = Object.entries(pie.toppings).reduce((acc, [topping, hasTopping]) => {
    if (hasTopping) {
      acc.push(toppingsLookup[topping]);
    }
    return acc;
  }, [])
  
  return {...pie, toppings};
})

console.log(formatted); 

Ответ №2:

РЕДАКТИРОВАТЬ: Теперь, когда вопрос был отредактирован для уточнения, этот код преобразует исходный объект pies в формат, в котором свойство toppings каждого пирога представляет собой массив объектов со свойствами name:

 pies.forEach((pie) => {
    const toppingsBool = pie.toppings;
    pie.toppings = [];

    if (toppingsBool.whippedCream) {
      pie.toppings.push({name: toppings[0]});
    }
    if (toppingsBool.powderedSugar) {
      pie.toppings.push({name: toppings[1]});
    }
})