set-array
Version:
Set array items declaratively
71 lines (48 loc) • 984 B
JavaScript
import{groupBy}from"./group.js";
export const concatUpdates=(updates)=>{
if(updates.length===1){
return updates
}
const updatesA=Object.values(groupBy(updates,"index")).map(concatGroup);
return[...updatesA].sort(secondSortFunc)
};
const concatGroup=(updates)=>{
if(updates.length===1){
return updates[0]
}
const[{index,any}]=updates;
const updatesA=[...updates].sort(firstSortFunc);
const items=updatesA.flatMap(getItems);
return{index,any,items}
};
const getItems=({items})=>items;
const firstSortFunc=(updateA,updateB)=>{
if(updateA.negation<updateB.negation){
return-1
}
if(updateA.negation>updateB.negation){
return 1
}
if(updateA.fullIndex<updateB.fullIndex){
return-1
}
if(updateA.fullIndex>updateB.fullIndex){
return 1
}
return 0
};
const secondSortFunc=(updateA,updateB)=>{
if(updateA.any<updateB.any){
return 1
}
if(updateA.any>updateB.any){
return-1
}
if(updateA.index<updateB.index){
return-1
}
if(updateA.index>updateB.index){
return 1
}
return 0
};