0

I have an array

data = [
{code: 'A1', name: 'bag', qty: 3},
{code: 'A2', name: 'purse', qty: 2},
{code: 'A3', name: 'belt', qty: 1},
]

I want to omit qty & duplicate each item to another array based on each qty :

data = [
{code: 'A1', name: 'bag'},
{code: 'A1', name: 'bag'},
{code: 'A1', name: 'bag'},
{code: 'A2', name: 'purse'},
{code: 'A2', name: 'purse'},
{code: 'A3', name: 'belt'},
]

I've tried :

const [qtyList, setQtyList] = useState(
 new Array(renderData.length).fill(1)
);
const [selectedProduct, setSelectedProduct] = useState([])

const updatedQty = qtyList.map((q, index) => {
            if (index === k) return q = parseInt(val)
            else return q
        });
        setQtyList(updatedQty); //[3,2,1]

data.map((i, idx) => {
 let temp = []
 let existed = data.filter(x=>x.code==i.code).length
 for (let x=0; x<=qtyList[idx]; x++){
   temp.push(i)
 }
 setSelectedProduct((prev)=> [...prev, i])
}
0

5 Answers 5

4

Use the following code:

var data = [
  { code: 'A1', name: 'bag', qty: 3 },
  { code: 'A2', name: 'purse', qty: 2 },
  { code: 'A3', name: 'belt', qty: 1 },
];

var newArray = data.map(x => {
  return Array(x.qty).fill({ code: x.code, name: x.name })
})

console.log([].concat.apply([], newArray))

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

Comments

2

An example using flatMap

const data = [
    { code: "A1", name: "bag", qty: 3 },
    { code: "A2", name: "purse", qty: 2 },
    { code: "A3", name: "belt", qty: 1 },
];

const o = data.flatMap(({ code, name, qty }) =>
    Array(qty).fill({ code, name })
);

console.log(o);

Comments

0
data.map(item => Array(item.qty).fill({ code: item.code, name: item.name })).flat();

Comments

0

Use this code

data.reduce((a,{qty, ...rest})=>a.concat(Array(qty).fill({...rest})),[]);

Comments

0

There is probably a more elegant solution to this problem, but this was my quick fix:

let data = [
{code: 'A1', name: 'bag', qty: 3},
{code: 'A2', name: 'purse', qty: 2},
{code: 'A3', name: 'belt', qty: 1},
]

let dupArr = []

data.map((i) =>{
   for(let j = 0;j<= i['qty']-1; j++){
       dupArr.push(i);
   }
});

dupArr.map((idx)=>{
    delete idx['qty'];
})

console.log(dupArr);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.