簡體   English   中英

Lodash從對象數組中查找公用值

[英]lodash to find common values from array of objects

從對象數組中找到常用值並為它們加尾音

嘗試使用lodash groupBy

var data =[
  {
    "dc": 1,
    "effDate": "1/2/2019",
    "expDate": "1/2/2019",
    "rate": 1,
    "minCharge": 2
  },
  {
    "dc": 1,
    "effDate": "1/2/2019",
    "expDate": "1/2/2019",
    "rate": 2,
    "minCharge": 6
  },
  {
    "dc": 1,
    "effDate": "1/2/2019",
    "expDate": "1/2/2019",
    "rate": 4,
    "minCharge": 7
  }
]

var expectedResult=[
  {
    "dc": 1,
    "effDate": "1/2/2019",
    "expDate": "1/2/2019",
    "rateCharge": [
      {
        "rate": 1,
        "minCharge": 2
      },
      {
        "rate": 2,
        "minCharge": 6
      },
      {
        "rate": 4,
        "minCharge": 7
      }
    ]
  }
]

在數據dc中,effDate,expDate是相同的,因此我需要將常見內容保留為平面結構,並將重復項移到rateCharge中。

var expectedResult=uniqBy(data,(val1.rate,val2.rate) => {
  val1.rate!=val2.rate;    
});

我嘗試使用lodash uniqBy屬性,但沒有得到預期的結果。

您需要按effDate對項目進行effDate ,然后使用_.pick() / _.omit()_.map()並將_.uniqBy()rate作為唯一標識符。

打字稿示例 (打開瀏覽器控制台)

 const { flow, partialRight: pr, groupBy, map, head, pick, omit, uniqBy } = _ const EFF_DATA = 'effDate' const baseProps = ['dc', EFF_DATA, 'expDate'] const fn = flow( pr(groupBy, EFF_DATA), pr(map, g => ({ ...pick(head(g), baseProps), rateCharge: uniqBy(map(g, pr(omit, baseProps)), 'rate') })) ) const data = [{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":1,"minCharge":2},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":2,"minCharge":6},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":4,"minCharge":7}] const result = fn(data) console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script> 

如果您已經導入了整個lodash軟件包,則可以使用鏈接:

 const { flow, partialRight: pr, groupBy, map, head, pick, omit, uniqBy } = _ const EFF_DATA = 'effDate' const baseProps = ['dc', EFF_DATA, 'expDate'] const data = [{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":1,"minCharge":2},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":2,"minCharge":6},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":4,"minCharge":7}] const result = _(data) .groupBy(EFF_DATA) .map(g => ({ ...pick(head(g), baseProps), rateCharge: uniqBy(map(g, pr(omit, baseProps)), 'rate') })); console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script> 

和lodash / fp版本:

 const { flow, groupBy, map, head, pick, omit, uniqBy, assoc } = _; const EFF_DATA = 'effDate' const baseProps = ['dc', EFF_DATA, 'expDate']; const fn = flow( groupBy(EFF_DATA), map(g => assoc( 'rateCharge', flow(map(omit(baseProps)), uniqBy('rate'))(g), pick(baseProps, head(g)) )) ) const data = [{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":1,"minCharge":2},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":2,"minCharge":6},{"dc":1,"effDate":"1/2/2019","expDate":"1/2/2019","rate":4,"minCharge":7}] const result = fn(data) console.log(result) 
 <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM