我有以下包含Date
对象的数据结构,其中一些对象嵌套在对象中:
[
new Date("2018-11-20T09:00:00.000Z"),
new Date("2018-11-19T09:00:00.000Z"),
{
"before": new Date("2018-12-14T00:00:00.000Z")
}
]
使用 ramda,我想将其展平,使其变为:
[
new Date("2018-11-20T09:00:00.000Z"),
new Date("2018-11-19T09:00:00.000Z"),
new Date("2018-12-14T00:00:00.000Z")
]
我使用的合并审理map
,values
,unnest
和flatten
,但没有运气。理想情况下,我希望它能够工作,以便无论嵌套对象和键名如何,它都会变平。
将 R.when 与 R.has 和 R.prop 结合使用,从在地图中具有该属性的对象中提取值。
const { pipe, map, when, has, prop } = R;
const extractOrVal = (p) => map(when(has(p), prop(p)));
const extractOrValBefore = extractOrVal('before');
const data = [
new Date("2018-11-20T09:00:00.000Z"),
new Date("2018-11-19T09:00:00.000Z"),
{
"before": new Date("2018-11-14T00:00:00.000Z")
}
];
console.log(extractOrValBefore(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
如果可以有多个键,或者您不知道键的名称,则可以使用 R.values。这将从对象中提取所有值,而不是日期:
const { chain, values, unless, is } = R;
const extractAndFlatten = chain(unless(is(Date), values));
const data = [
new Date("2018-11-20T09:00:00.000Z"),
new Date("2018-11-19T09:00:00.000Z"),
{
"before": new Date("2018-12-14T00:00:00.000Z")
}
];
console.log(extractAndFlatten(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
Scott Christopher 的另一个建议是提取未知/多个道具,并将结果展平:
const { chain, ifElse, is, of, values } = R;
const extractAndFlatten = chain(ifElse(is(Date), of, values));
const data = [
new Date("2018-11-20T09:00:00.000Z"),
new Date("2018-11-19T09:00:00.000Z"),
{
"before": new Date("2018-12-14T00:00:00.000Z")
}
];
console.log(extractAndFlatten(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句