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

标签 javascript arrays object underscore.js javascript-objects

目前我有以下对象结构,

`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/

相关文章:

java - Stringbuilder 检查字符串但跳过该字符串并返回其他字符串

python - 数组的 numpy.shape 中的 L 和 numpy.type 中的 32 是什么?

java - 此代码的问题(抱歉,我不能具体说明)

javascript - 将base64图像数据转换为png?

javascript - Paypal JS SDK Smart Payment - 禁用无帐户信用卡支付的地址提示

javascript - 你如何在javascript中扩展一个对象

java - 为什么对象分配引用内存位置,而基本类型则不然?

javascript - 为什么我们在此片段中使用 "this"关键字?

javascript - 在 asp.net 背后的代码中获取 bootstrap dateTimePicker 值

javascript - 如何延迟垂直选项卡上的鼠标悬停事件