如何将"Object.values()"映射到嵌套对象的对象数组上?



我正在尝试映射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()映射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 } ]
// ]

但我不想失去国家的名字!如何利用原版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,您必须使用两次R.map

  1. 映射数组中的项。
  2. 映射对象的每个值。

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>

相关内容

最新更新