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?

4
  • 1
    Hint : you can loop through first array and create new array. Commented May 20, 2022 at 5:08
  • Why not? Loop to the value of numbers for each objects and add the same into the new array Commented May 20, 2022 at 5:12
  • Can u provide me the code? Please Commented May 20, 2022 at 5:13
  • post the code which you have tried. Commented May 20, 2022 at 5:14

6 Answers 6

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)

Sign up to request clarification or add additional context in comments.

Comments

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);
        }
      }

Comments

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)

Comments

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)

Comments

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) );

Comments

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)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.