此问题是this one
的扩展我创建了一个购物车,可以在其中添加或删除物品。在我的应用中的某个时候,我正在显示此购物车,最多可容纳3件商品。但是,随着我从购物车中添加/删除商品的顺序发生了变化。
{cartItems.map( item => <p>{item.name || item.time}</p>)}
要添加的项目具有type属性,可用于设置订单
[{
"id": "0",
"type": "service",
"name": "Painting",
}, {
"id": "0",
"type": "time",
"day": "today",
"time": "09:40",
}, {
"id": "0",
"type": "business",
"name": "Baron's Motel",
}]
到目前为止,一个善良的陌生人教我如何使用sort()来解决两个问题
function compare(a, b) {
if (a.type === b.type) return 0;
else if (a.type === 'time') return -1;
return 1;
}
我该如何进一步提高这一层次并分类3个项目,始终在“服务”之前显示“时间”类型的对象,并在最后放置“业务”?
答案 0 :(得分:2)
您可以使用对象或其他某种机制来存储项目类型的 weights :
function compare(a, b) {
const weights = { time: 0, service: 1, business: 2 };
return weights[a.type] - weights[b.type];
}
答案 1 :(得分:1)
您可以按所需的特定顺序排列类型的数组。并使用该数组中当前类型索引的差值。
const arr = [{
"id": "0",
"type": "service",
"name": "Painting",
},
{
"id": "0",
"type": "time",
"day": "today",
"time": "09:40",
},
{
"id": "0",
"type": "business",
"name": "Baron's Motel",
}]
let order = ['time', 'service', 'business'];
const res = arr.sort((a, b) => order.indexOf(a.type) - order.indexOf(b.type));
console.log(res)