所以我使用了下划线sortBy,我按最低成本排序JSON对象数组......效果很好。
客户也想要的是:
“如果两个或多个结果的成本相同,那么收集点的顺序应该是以下优先级(最高优先级)
最低价格(默认) - 独特价格时 与搜索位置的距离 最早的收集日期“
这样的事情可能吗?
如果您有10个项目的列表和 2是1英镑, 2是2英镑, 2是3英镑, 2是4英镑, 2是5英镑 这不是最终有点疯狂试图找出排序优先级吗?
答案 0 :(得分:0)
看看this answer to a (very) similar question。
还有一个更简单的版本,courtesy of Janet Riley:
var fullySorted = _.sortBy(( _.sortBy(list, 'collectionDate')), 'price');
或
var fullySorted = _.chain(list).sortBy('collectionDate').sortBy('price').value();
答案 1 :(得分:0)
在这种情况下,我实际上更喜欢使用Array.prototype.sort
,因为它允许您设置自定义比较器函数,这将允许您在不进行多次传递或使用hacky变通方法的情况下对数组进行排序。 / p>
这是一个相对简单的比较器实现,它允许您指定要比较的几个函数(或属性),如果两个对象根据一个函数相等,则将使用下一个函数。
const items = [{
cost: 1,
prioritiy: 1
}, {
cost: 2,
prioritiy: 1
}, {
cost: 1,
prioritiy: 2
}];
items.sort(by('cost', 'priority'));
console.log(items);
function by(...args) {
const funcs = args.map(arg =>
typeof arg === 'function' ? arg : obj => obj[arg]
);
const compare = (val1, val2) => {
return typeof val1 === 'string' &&
typeof val2 === 'string'
? val1.localeCompare(val2)
: val1 - val2;
};
return (a, b) => {
for (let i = 0; i < funcs.length; i++) {
let comp = compare(funcs[i](a), funcs[i](b));
if (comp !== 0) {
return comp;
}
}
return 0;
};
}