使用ramda.js获取嵌套对象数组中键的所有值

时间:2015-12-16 14:36:32

标签: javascript arrays json nested ramda.js

我对如何使用ramda继续这种情况感到有些困惑。这是我正在使用的JSON。

{ "type" : "CartWsDTO",
"Cartentries" : [ { "entryNumber" : 1, "flightGroup" : { "PAXDetails" : [ { "paxID" : "1", "paxPrice" : "770.82", "paxType" : "ADT" }, { "paxID" : "2", "paxPrice" : "770.82", "paxType" : "ADT" } ] } }, { "entryNumber" : 2, "flightGroup" : { "PAXDetails" : [ { "paxID" : "1", "paxName" : "Vinitha", "paxPrice" : "770.82", "paxSurname" : "Vinitha", "paxType" : "ADT" }, { "paxID" : "2", "paxName" : "Prahal", "paxPrice" : "770.82", "paxSurname" : "Prahal", "paxType" : "ADT" } ] } } ] }

以上JSON中有2个CartEnteries。每个条目的flightGroup中都有一个名为paxDetails的数组。从这个paxDetails数组我想选择paxPrice并为该购物车条目的所有pax价格总和。在传统的for循环中,如果条件我能够实现它。但是使用Ramda我无法理解如何开始。请给我一个解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我不太清楚你在寻找什么作为输出。这是一个解决方案,它只返回两组价格的总和,并返回一个包含这些值的数组:

var calcTotals = R.pipe(
    R.prop('Cartentries'),
    R.map(R.pipe(
        R.path(['flightGroup', 'PAXDetails']),
        R.map(R.pipe(R.prop('paxPrice'), Number)),
        R.sum
    ))
);
calcTotals(cart); //=> [1541.64, 1541.64]

但是如果你想要一种不同的输出,比如

{1: 1541.64, 2: 1541.64}

[{entryNumber : 1, total: 1541.64}, {entryNumber: 2. total: 1541.64}]

或者其他什么,你必须做一些改变。