基于数组创建新数组

问题描述 投票:0回答:1

我有一个如下数组:

const data = [
 { new_id: "56", old_id: "229", ratio: "0.1", week: "20" },
 { new_id: "55", old_id: "56,96", ratio: "0.2,0.4", week: "20" }
];

我希望新数组看起来像这样:

const expectedData = [
 { new_id: "56", old_id: "229", ratio: "0.1", week: "20" },
 { new_id: "55", old_id: "56", ratio: "0.2", week: "20" },
 { new_id: "55", old_id: "96", ratio: "0.4", week: "20" }
];

我写了一些代码,但是现在我被卡住了

const result = data.map(data => {
  return {
   ...data,
   old_id: data.old_id.split(","),
   ratio: data.ratio.split(",")
  };
});

如何解决这个问题?

javascript arrays
1个回答
1
投票

您可以采用flatMap方法,也可以映射ratio

const data = [
 { new_id: "56", old_id: "229", ratio: "0.1", week: "20" },
 { new_id: "55", old_id: "56,96", ratio: "0.2,0.4", week: "20" }
];
const result = data.flatMap(o => o.ratio.split(',').map(ratio => ({ ...o, ratio})))

console.log(result);

0
投票

您可以使用Array.reduce()进行迭代,并在迭代内部使用for...of循环,如下所示:

const data = [{
    new_id: "56",
    old_id: "229",
    ratio: "0.1",
    week: "20"
  },
  {
    new_id: "55",
    old_id: "56,96",
    ratio: "0.2,0.4",
    week: "20"
  }
];

const newData = data.reduce((acc, cur) => {
  let old_ids = cur.old_id.split(',')
  for(let old_id of old_ids){
    acc.push(
    {
      ...cur,
      old_id
    }
    )
  }
  return acc;
}, [])

console.log(newData)
© www.soinside.com 2019 - 2024. All rights reserved.