我想合并一个对象数组,如下所示:
[{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,有没有一种简单的方法可以实现它?
答案 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
。