You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据numberOfUnit操作JavaScript对象数组生成新数组?

如何根据numberOfUnit字段转换JavaScript对象数组?

你需要把包含numberOfUnit的对象数组,拆分成每个类型对应numberOfUnit数量的新对象,每个新对象的propertyUnitType要加上序号。这里有几种实用的实现方式:

原始输入数组

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" }
];

实现方法

方法1:flatMap + Array.from(简洁现代)

这是最推荐的写法,利用flatMap的扁平化特性,结合Array.from快速生成对应长度的数组:

const generated = unitsAndRates.flatMap(item => {
  return Array.from({ length: item.numberOfUnit }, (_, index) => ({
    propertyUnitType: `${item.propertyUnitType}${index + 1}`,
    propertyUnitRate: item.propertyUnitRate
  }));
});
  • flatMap会自动把每个元素返回的数组展开,避免嵌套数组的麻烦
  • Array.from({ length: item.numberOfUnit })创建一个长度等于numberOfUnit的空数组
  • 映射函数里用index + 1生成1开头的序号,拼接成新的propertyUnitType,同时保留原有的propertyUnitRate

方法2:flatMap + 普通循环(直观易懂)

如果觉得Array.from不够直观,用普通循环生成子数组也很清晰:

const generated = unitsAndRates.flatMap(item => {
  const items = [];
  for (let i = 1; i <= item.numberOfUnit; i++) {
    items.push({
      propertyUnitType: `${item.propertyUnitType}${i}`,
      propertyUnitRate: item.propertyUnitRate
    });
  }
  return items;
});

逻辑很直白:对每个原始对象,循环numberOfUnit次,每次生成一个带序号的新对象,最后通过flatMap把所有子数组合并成一个大数组。

方法3:reduce累积法(传统思路)

如果你习惯用reduce处理数组累积操作,这种写法也能达到目的:

const generated = unitsAndRates.reduce((accumulator, item) => {
  for (let i = 1; i <= item.numberOfUnit; i++) {
    accumulator.push({
      propertyUnitType: `${item.propertyUnitType}${i}`,
      propertyUnitRate: item.propertyUnitRate
    });
  }
  return accumulator;
}, []);

初始值是一个空数组,每次遍历原始对象时,把生成的新对象都添加到累积数组里,最终得到目标结果。

内容的提问来源于stack exchange,提问作者Chibuike Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:48:04