繁体   English   中英

使用 Ramda.js 求和和排序

[英]Sum and sort with Ramda.js

我有一个 object ,它有 object 的数字数组,如下所示:

books = [{
  id: "a6113b1cd5d4617f63bb10abc874bea7",
  times: [{
    0: 1,
    1: 5
  }],
  length: 1,
  rating: 4.77,
}, {
  id: "b6113b1cd5d4617f63bb10abc874bea7",
  times: [{
    0: 8
  }],
  length: 1,
  rating: 2.6,
}]

I want to add sort by times , but that needs to be sum of all elements inside that object - In the example for the first object it is 1+5=6 and for the second object is 8 so the sorted end result is first object然后是第二个。 这是我到目前为止所拥有的,但它不完整。 你知道我如何得到数组的总和吗?

const timesSorting =  R.ascend(R.path(['times']))
const sorting = R.sortWith([timesSorting])
sorting(books)

使用 R.sortBy 因为您需要按单个属性排序。 创建一个获取time属性的 function,使用R.chainR.values来获取时间数组中所有值的数组,并将它们相加。

 const { pipe, prop, chain, values, sum, sortBy} = R const getTimesSum = pipe(prop('times'), chain(values), sum); const sorting = sortBy(getTimesSum) const books = [{"id":"a6113b1cd5d4617f63bb10abc874bea7","times":[{"0":1,"1":5}],"length":1,"rating":4.77},{"id":"b6113b1cd5d4617f63bb10abc874bea7","times":[{"0":8}],"length":1,"rating":2.6}] const result = sorting(books) console.log(result)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

如果times始终是一个具有单个 object 且具有数字索引的数组,则可以将times简化为数字数组,然后求和会更容易:

 const { pipe, prop, sum, sortBy } = R const getTimesSum = pipe(prop('times'), sum); const sorting = sortBy(getTimesSum) const books = [{ "id": "a6113b1cd5d4617f63bb10abc874bea7", "times": [1, 5], // an array of numbers "length": 1, "rating": 4.77 }, { "id": "b6113b1cd5d4617f63bb10abc874bea7", "times": [8], // an array of numbers "length": 1, "rating": 2.6 }] const result = sorting(books) console.log(result)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM