我有这样的对象数组:
var points = [{a: 4, b: 3, c:'parent'}, {a: 1, b:5, c:'child'}, {a: 5, b: 2, c:'child'}, {a: 1, b: 2, c:'parent'}, {a: 3, b: 1, c:'child'}];
我需要对“ a”对象的值进行排序。但是问题在于,如果它具有“ c”对象的值“ parent”,则“ c”对象的值“ child”应该是该对象的下一个对象,并且不应进行排序。
最后我希望有这个排序的点数组:
var sortedPoints = [{a: 1, b: 2, c:'parent'}, {a: 3, b: 1, c:'child'} ,{a: 4, b: 3, c:'parent'}, {a: 1, b:5, c:'child'}, {a: 5, b: 2, c:'child'}];
答案 0 :(得分:1)
您需要将父母和孩子分组,排序并获得一个平面数组。
var points = [{ a: 4, b: 3, c: 'parent' }, { a: 1, b: 5, c: 'child' }, { a: 5, b: 2, c: 'child' }, { a: 1, b: 2, c: 'parent' }, { a: 3, b: 1, c: 'child' }],
sorted = points
.reduce((r, o) => {
if (o.c === 'parent') r.push([o]);
else r[r.length - 1].push(o);
return r;
}, [])
.sort(([{ a }], [{ a: b }]) => a - b)
.flat();
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }