我想改变这个:
[
{ a: 2000, b: 4000 },
{ a: 8000, b: 5000 },
{ a: 6000, b: 1000 }
];
进入此:
[
[ 2000, 8000, 6000 ],
[ 4000, 5000, 1000 ]
];
使用 Ramda。
我可以只使用 R.reduce 来做到这一点,但我想知道是否有一种方法可以使用尽可能少的自定义代码,而是充分利用 Ramda 提供的功能。
还有一个警告;该解决方案不能假设对象中的键是已知的。它们在对象之间始终保持一致,但每次运行此函数时可能会发生变化。例如,代码的下一次运行可能是:
输入:
[
{ c: 1000, d: 4000, e: 7000 },
{ c: 2000, d: 5000, e: 8000 },
{ c: 3000, d: 6000, e: 9000 }
];
结果:
[
[ 1000, 2000, 3000 ],
[ 4000, 5000, 6000 ],
[ 7000, 8000, 9000 ],
];
只需使用 vanilla JS 并转置映射的对象值。
const transpose = (a) => a[0].map((_, i) => a.map(r => r[i]));
{
const
input = [
{ a: 2000, b: 4000 },
{ a: 8000, b: 5000 },
{ a: 6000, b: 1000 }
],
expected = [
[ 2000, 8000, 6000 ],
[ 4000, 5000, 1000 ]
],
actual = transpose(input.map(Object.values));
console.log(JSON.stringify(actual) === JSON.stringify(expected));
}
{
const
input = [
{ c: 1000, d: 4000 },
{ c: 2000, d: 5000 },
{ c: 3000, d: 6000 }
],
expected = [
[ 1000, 2000, 3000 ],
[ 4000, 5000, 6000 ]
],
actual = transpose(input.map(Object.values));
console.log(JSON.stringify(actual) === JSON.stringify(expected));
}