gpt4 book ai didi

javascript - 使用数组值从对象动态创建对象数组

转载 作者:行者123 更新时间:2023-12-03 00:32:25 25 4
gpt4 key购买 nike

目前我有以下对象结构,

`let selectedOptions = {  "color": {    "id": "2",    "values": [      {        "value": "red",        "label": "Red",        "id": 1      },      {        "value": "blue",        "label": "Blue",        "id": 2      }    ]  },  "size": {    "id": "19",    "values": [      {        "value": "medium",        "label": "Medium",        "id": 2      }    ]  },  "demo": {    "id": "19",    "values": [      {        "value": "neylon",        "label": "Neylon",        "id": 2      }    ]  }  .  .  .  N}; `

And want to create array of objects from the above object like as below,

[
{ color: "red", size: "medium", demo: "neylon" },
{ color: "blue", size: "medium", demo: "neylon" }
]

我已经尝试过如下但没有成功 https://jsfiddle.net/6Lvb12e5/18/

let cArr = [];
for(key in selectedOptions) {
selectedOptions[key].values.forEach(function(val,i) {
cArr.push({ [key]: val.value })
})
}

谢谢

最佳答案

您可以采用所需的部分,例如颜色大小演示,并根据给定数据构建笛卡尔积。

const
cartesian = (a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []),
options = { color: { id: "2", values: [{ value: "red", label: "Red", id: 1 }, { value: "blue", label: "Blue", id: 2 }] }, size: { id: "19", values: [{ value: "small", label: "Small", id: 1 }, { value: "medium", label: "Medium", id: 2 }] }, demo: { id: "19", values: [{ value: "neylon", label: "Neylon", id: 2 }] } },
parts = Object
.entries(options)
.map(([k, { values }]) => [k, values.map(({ value }) => value)]),
keys = parts.map(([key]) => key),
result = parts
.map(([, values]) => values)
.reduce(cartesian)
.map(a => Object.assign(...a.map((v, i) => ({ [keys[i]]: v }))));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用数组值从对象动态创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53801930/

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