lodash:对象的并集数组

时间:2018-11-27 06:29:20

标签: arrays lodash union

我想合并一个对象数组,如下所示:

[{end: 1, start: 10},
 {end: 11, start: 20},
 {end: 21, start: 29}]

例如,如果array[i].start == array[i+1].end + 1,则将它们结合起来

之前:

[{end: 1, start: 10},
{end: 11, start: 20}]

之后:

{end: 1, start: 20}

不熟悉lodash,有没有一种简单的方法可以实现它?

2 个答案:

答案 0 :(得分:0)

尝试一下:

    var obj = [{end: 1, start: 10},{end: 11, start: 20},{end: 21, start: 29}]
    var max = { start: _.maxBy( obj, "start" ).start }
    var min = { end: _.minBy( obj, "end" ).end }

    _.extend(max,min)

   //{start: 29, end: 1}

答案 1 :(得分:0)

您不必为此使用pyinstaller -F -w \ --onefile \ --hidden-import='email.mime.multipart' \ --hidden-import='email.mime.message' \ --hidden-import='email.mime.text' \ --hidden-import='email.mime.image' \ --hidden-import='email.mime.audio' \ --hidden-import='sqlalchemy.sql.default_comparator' \ --hidden-import='jinja2' \ main.py 。如果使用 ES6 ,它将只是一个Array.reduce

lodash

使用lodash,您可以执行以下操作:

const data = [{ end: 1, start: 10 }, { end: 11, start: 20 } ] 

const result = data.reduce((r,c,i) => {
  r.end = c.end < r.end || i == 0 ? c.end : r.end
  r.start = c.start > r.start ? c.start : r.start
  return r
}, { end: 0, start: 0 })

console.log(result)
const data = [{ end: 1, start: 10 }, { end: 11, start: 20 }] 

const r = _.merge(_.minBy(data, 'end'), _.pick(_.maxBy(data,'start'), 'start'))

console.log(r)

想法是获取最大值和最小值,然后merge个对象。但是,诀窍是在合并中仅pick<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>属性,这样就不会覆盖start