所以目前我有这个数组结构:
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/