javascript - 如何在其他对象数组的每个值上创建多个数组?

标签 javascript arrays object javascript-objects

所以目前我有这个数组结构:

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

所以基本上我需要基于数组初始对象的每个组合创建一个新数组,并且初始数组包含数千个项目。

这是我目前所拥有的,但没有运气获得我需要的结构。

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)

有什么方法可以将数据转换成我需要的结构吗?提前致谢!

最佳答案

我建议创建一个通用解决方案,它将遍历模板 object 的可能属性和值,并创建一个包含所有可能结果的数组。

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

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 - 如何在其他对象数组的每个值上创建多个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72785581/

相关文章:

javascript - 无法使用 Passport 登录 - Nodejs

javascript - 使用 jQuery 在 <li> 中包装文本

javascript - 在 React 中将一个数组中的值分配给另一个数组

c - 使用间接运算符获取值

javascript - 从数组 Ionic 2 Storage 中删除元素

ios - ARKit 保存对象位置并在下一个 session 中查看它

php - 如何在 PHP 中释放内存?

javascript - 如何格式化 Google Chart 数据以显示项目数,但可以按年份过滤

javascript - 如何检查数组是否为空或存在?

Javascript:正在更改的日期对象