所以目前我有这个数组 struct :

const object = {
  object1: ["01", "02"],
  object2: ["item1", "item2", "item3"],
  object3: ["product1", "product2"]
}

我需要将其转换为:

const array = [
  {
    object1: "01",
    object2: "item1",
    object3: "product1",
  }, {
    object1: "02",
    object2: "item1",
    object3: "product1",
  }, {
    object1: "01",
    object2: "item2",
    object3: "product1",
  }, {
    object1: "01",
    object2: "item3",
    object3: "product1",
  }, {
    object1: "02",
    object2: "item2",
    object3: "product1",
  }, {
    object1: "02",
    object2: "item3",
    object3: "product1",
  }, {
    object1: "01",
    object2: "item1",
    object3: "product2",
  }, {
    object1: "02",
    object2: "item1",
    object3: "product2",
  }, {
    object1: "02",
    object2: "item2",
    object3: "product2",
  }, {
    object1: "03",
    object2: "item2",
    object3: "product2",
  },
]

因此,基本上我需要根据数组的初始对象上的每个组合创建一个新数组,并且初始数组将包含数千项.

这是我到目前为止所拥有的,但没有运气得到我所需要的 struct .

const object = {
  object1: ["01", "02"],
  object2: ["item1", "item2", "item3"],
  object3: ["product1", "product2"]
}
const arr = []
Object.entries(object).forEach((element, i) => {
  element.forEach((innerElement, j) => {
    let _element = {[`${element[0]}`]:element[1][j]}
    arr.push(_element)
  })
});

console.log("map", arr)

有没有办法将数据转换为我需要的 struct ?提前感谢!

推荐答案

我建议创建一个通用解决方案,该解决方案将迭代模板object的可能属性和值,并创建一个包含所有可能结果的array.

我们将创建一个addPossibleValues()函数,然后为模板对象中的每个键扩展对象array.每轮将按相关属性数组的连续长度增加对象数.

const object = {
  object1: ["01", "02"],
  object2: ["item1", "item2", "item3"],
  object3: ["product1", "product2"]
}

function addPossibleValues(arr, property, possibleValues) {
    return possibleValues.flatMap(v => { 
        return (arr.length ? arr: [{}]).map(x => { 
            return { ...x, [property]: v};
        })
    });
}

let result = [];
for(let key in object) {
    result = addPossibleValues(result, key, object[key]);
}

console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; }

您也可以通过拨打Array.reduce()次电话来完成此操作:

const object = {
  object1: ["01", "02"],
  object2: ["item1", "item2", "item3"],
  object3: ["product1", "product2"]
}

function addPossibleValues(arr, property, possibleValues) {
    return possibleValues.flatMap(v => { 
        return (arr.length ? arr: [{}]).map(x => { 
            return { ...x, [property]: v};
        })
    });
}

let result = Object.keys(object).reduce((acc, key) => {
    return addPossibleValues(acc, key, object[key]);
}, []);
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; }

Javascript相关问答推荐

react/redux中的formData在expressjs中返回未定义的req.params.id

Msgraph用户邀请自定义邮箱模板

我们如何从一个行动中分派行动

如何从Intl.DateTimeFormat中仅获取时区名称?

我的角模板订阅后不刷新'

连接到游戏的玩家不会在浏览器在线游戏中呈现

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

如何在Press上重新启动EXPO-AV视频?

匹配一个或多个可选重复的特定模式

在Java脚本中录制视频后看不到曲目

如果NetSuite中为空,则限制筛选

用另一个带有类名的div包装元素

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

从异步操作返回对象

有角粘桌盒阴影

如何在单击链接时设置一个JavaScript变量(以打开弹出窗口的特定部分)

单击子按钮时将活动切换类添加到父分区

已在EventListener中更新/更改异步的React.js状态对象,但不会导致组件重新呈现

try 导入material 时出现错误NG0203