繁体   English   中英

如何 map `Object.values()` 在对象数组上嵌套对象?

[英]How to map `Object.values()` over an array of objects nesting objects?

我正在尝试 map Object.values()以仅从对象数组中提取值:

const countries = [
    {
        "austria": { value: 1},
        "canada": {value: 2},
        "nepal": { value: 3},
        "india": { value: 4}
    },
    {
        "australia": { value: 10},
        "france": { value: 20},
        "egypt": { value: 40},
        "usa": { value: 20}
    },
    {
        "mexico": { value: 3},
        "germany": { value: 100},
        "southAfrica": { value: 1},
        "china": { value: 10}
    }
]

要得到:

// expected output
[
    {
        "austria": [ 1 ],
        "canada": [ 2 ],
        "nepal": [ 3 ],
        "india": [ 4 ]
    },
    {
        "australia": [ 10 ] ,
        "france": [ 20 ],
        "egypt": [ 40 ],
        "usa": [ 20 ]
    },
    {
        "mexico": [ 3 ],
        "germany": [ 100 ],
        "southAfrica": [ 1 ],
        "china": [ 10 ]
    }
]

我试过了

Object.values(countries) // returns the same as `countries`

并且还尝试使用ramdamap()到 map Object.values() countries

const R = require("ramda")

R.map(Object.values, countries)
// gives:
// [
//   [ { value: 1 }, { value: 2 }, { value: 3 }, { value: 4 } ],
//   [ { value: 10 }, { value: 20 }, { value: 40 }, { value: 20 } ],
//   [ { value: 3 }, { value: 100 }, { value: 1 }, { value: 10 } ]
// ]

但我不想失去国家的名字! 我如何利用 vanilla map或 ramda 的版本来获得预期的 output?

您需要 map 条目和嵌套对象值。

 const countries = [{ austria: { value: 1 }, canada: { value: 2 }, nepal: { value: 3 }, india: { value: 4 } }, { australia: { value: 10 }, france: { value: 20 }, egypt: { value: 40 }, usa: { value: 20 } }, { mexico: { value: 3 }, germany: { value: 100 }, southAfrica: { value: 1 }, china: { value: 10 } }], result = countries.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [k, Object.values(v)])) ); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

使用 Ramda,你必须使用 use R.map两次:

  1. 到 map 遍历数组中的项目。
  2. 到map以上每个值object。

 const countries = [ { "austria": { value: 1}, "canada": {value: 2}, "nepal": { value: 3}, "india": { value: 4} }, { "australia": { value: 10}, "france": { value: 20}, "egypt": { value: 40}, "usa": { value: 20} }, { "mexico": { value: 3}, "germany": { value: 100}, "southAfrica": { value: 1}, "china": { value: 10} } ] const result = R.map(R.map(Object.values))(countries); console.log(result);
 .as-console-wrapper { max-height: 100% !important }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.min.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM