gpt4 book ai didi

javascript - 生成 Javascript 对象键/值的排列

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:36 27 4
gpt4 key购买 nike

我需要创建一个嵌套的选项层次结构。选项是数组上的键,具有多个子选项作为嵌套对象。

我需要从这个对象生成一个嵌套的层次结构。

从这样的对象开始:

const starterObject = {
id1: {
1: { value: "A" },
2: { value: "B" },
3: { value: "C" },
},
id2: {
1: { value: 10 },
2: { value: 20 },
},
};

我需要以这样的排列对象结束:

const permutations2 = {
1: [{ value: "A" }, { value: 10 }],
2: [{ value: "A" }, { value: 20 }],
3: [{ value: "B" }, { value: 10 }],
4: [{ value: "B" }, { value: 20 }],
5: [{ value: "C" }, { value: 10 }],
6: [{ value: "C" }, { value: 20 }],
};

我试过这样的:

const starterObject = {
id1: {
1: { value: "A" },
2: { value: "B" },
3: { value: "C" },
},
id2: {
1: { value: 10 },
2: { value: 20 },
},
};


const permutationMatrix = [];

Object.keys(starterObject["id1"]).forEach(key2 =>
Object.keys(starterObject["id2"]).forEach(key1 =>
permutationMatrix.push([
starterObject["id1"][key2],
starterObject["id2"][key1],
])
)
);

console.log(permutationMatrix)

但问题是 key 是硬编码的。实际对象将有 1-5 个键 (id1 - id5) 和任意数量的嵌套对象。

我认为这需要递归,但我不确定如何从这里开始。

最佳答案

Reduce、entries 和 values 可以提供帮助,并且不需要递归。

const starterObject = {
id1: {
1: { value: "A" },
2: { value: "B" },
3: { value: "C" },
},
id2: {
1: { value: 10 },
2: { value: 20 },
},
id3: {
1: { value: 100 }
}
};

var entries = Object.entries(starterObject)
var out = entries.reduce((arr, group) => {
const itms = Object.values(group)[1]
const vals = Object.values(itms)
// if first time, set up the initial arrays with first set of data
if (!arr.length) {
return vals.map(v => [v])
}
// after first one, we will just loop over the arrays
// and start adding the next set of data to each one
return arr.reduce((updated, curr) => {
vals.forEach(val => {
// make copy so we are not adding data to the reference
const copy = curr.slice()
copy.push(val)
updated.push(copy)
})
return updated
}, [])
}, [])

console.log(JSON.stringify(out))

关于javascript - 生成 Javascript 对象键/值的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57113779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com