0

Suppose I have an array:

const array = [
    {
        name: "Name 1",
        numbers: 3
    },
    {
        name: "Name 2",
        numbers: 2
    },
    {
        name: "Name 3",
        numbers: 3
    }
]

I want that every object with numbers value get multiplied by its state. Want this:

    // Expected Output
const array2 = [
    {
        name: "Name 1"
    },
    {
        name: "Name 1"
    },
    {
        name: "Name 1"
    },
    {
        name: "Name 2"
    },
    {
        name: "Name 2"
    },
    {
        name: "Name 3"
    },
    {
        name: "Name 3"
    },
    {
        name: "Name 3"
    }

]

Here every object is multiplied by its number value How can I do that?

Atul Yadav
  • 41
  • 2
  • 6

6 Answers6

2

You can do:

const array = [{name: "Name 1",numbers: 3},{name: "Name 2",numbers: 2},{name: "Name 3",numbers: 3}]

const result = array.map(({ name, numbers }) => 
  [...Array(numbers)].map(_ => ({ name }))).flat()

console.log(result)
Yosvel Quintero
  • 18,669
  • 5
  • 37
  • 46
0

for (length of array) and while (something is not 0)

const array = [
    {
        name: "Name 1",
        numbers: 3
    },
    {
        name: "Name 2",
        numbers: 2
    },
    {
        name: "Name 3",
        numbers: 3
    }
]

function splitArray(arr) {
  let newArr = [], number = -1;
  
  for (let item of arr) {
    number = item.numbers;

    while (number--) {
      newArr.push(item.name);
    }
  }
  
  return newArr
}

console.log( splitArray(array) );
Rickard Elimää
  • 7,107
  • 3
  • 14
  • 30
0

Loop array item first and get the numbers and loop the numbers inside.

let newArray = [];
      for(i=0; i<array.length; i++){
        //get item number
        var numberCount = array[i].numbers;
        for(j=0; j<numberCount.length; j++){
            newArray.push(array[i].name);
        }
      }
apps
  • 313
  • 1
  • 7
  • 17
0
const array = [
  {
    name: "Name 1",
    numbers: 3
  },
  {
    name: "Name 2",
    numbers: 2
  },
  {
    name: "Name 3",
    numbers: 3
  }
]

const array2 = array.reduce(
  (previousValue, currentValue) => {
    for (let i = 0; i < currentValue.numbers; i++) {
      previousValue.push({ name: currentValue.name });
    }
    return previousValue
  },
  []
)

console.log(array2)
0

By using Js es6 .reduce() ~ MDN web docs

I think the readability is better than just .map().

const array = [{ name: "Name 1", numbers: 3 }, { name: "Name 2", numbers: 2 }, { name: "Name 3", numbers: 3 }]

const result = array.reduce((acc, { numbers, name }) => {
    [...Array(numbers)].forEach(o => acc.push({ name }))
    return acc
}, [])

console.log(result)
JuneC
  • 59
  • 7
0

map() and for():

const array = [
    {
        name: "Name 1",
        numbers: 3
    },
    {
        name: "Name 2",
        numbers: 2
    },
    {
        name: "Name 3",
        numbers: 3
    }
]

const arr = array.map(el => {
  let elAr = []
  for(let i=0; i<el.numbers; i++){
    elAr = [...elAr, {name: el.name}]
  }
  return elAr
})
const result = arr.flat()
console.log(result)
VMT
  • 789
  • 1
  • 3
  • 11