Манипулирование массивом объектов javascript для получения нового набора массивов объектов

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

У меня есть этот массив объектов

 const unitsAndRates = [
  {
    propertyUnitType: "store",
    propertyUnitRate: "20000",
    numberOfUnit: 4
  },
  {
    propertyUnitType: "duplex",
    propertyUnitRate: "20000",
    numberOfUnit: 3
  }
];

  

и мне нужно что-то вроде этого сгенерированного массива из приведенного выше.

 const generated = [
  {
    propertyUnitType: "store1",
    propertyUnitRate: "20000"
  },
  {
    propertyUnitType: "store2",
    propertyUnitRate: "20000"
  },
  {
    propertyUnitType: "store3",
    propertyUnitRate: "20000"
  },
  {
    propertyUnitType: "store4",
    propertyUnitRate: "20000"
  },
  {
    propertyUnitType: "duplex1",
    propertyUnitRate: "20000"
  },
  {
    propertyUnitType: "duplex2",
    propertyUnitRate: "20000"
  },
  {
    propertyUnitType: "duplex3",
    propertyUnitRate: "20000"
  }
];
  

Как я могу сгенерировать результат, приведенный выше, с учетом numberOfUnit ?

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

1. Каковы правила дублирования и что вы пробовали?

Ответ №1:

Это можно сделать с помощью Array.prototype.flatMap .

 const unitsAndRates = [
  {
    propertyUnitType: "store",
    propertyUnitRate: "20000",
    numberOfUnit: 4
  },
  {
    propertyUnitType: "duplex",
    propertyUnitRate: "20000",
    numberOfUnit: 3
  }
];

const result = unitsAndRates.flatMap((item) => [...Array(item.numberOfUnit).keys()].map((index) => ({
  propertyUnitType: item.propertyUnitType   (index   1),
  propertyUnitRate: item.propertyUnitRate
})));
console.log(result);  

Ответ №2:

 unitsAndRates.map(item => ({
  propertyUnitType: item.propertyUnitType,
  propertyUnitRate: item.propertyUnitRate
}))
  

или

 unitsAndRates.map({propertyUnitType, propertyUnitRate} => ({propertyUnitType, propertyUnitRate }))
  

И если вам нужно выполнить фильтрацию по numberOfUnit, попробуйте:

 const filteredUnits = unitsAndRates.filter(item => item.numberOfUnit === "2000") 
  

и тогда вы можете выполнить сопоставление

 filteredUnits.map({propertyUnitType, propertyUnitRate} => ({propertyUnitType, propertyUnitRate }))