如何依据指定数组顺序对JavaScript对象数组进行排序?
按指定规则排序对象数组
原始数据
const data = [ { food: 'dessert', name: 'sagu de tangerina' }, { food: 'garnish2', name: 'moranga refogada com bacon' }, { food: 'salad2', name: 'pimentão colorido' }, { food: 'rice', name: 'arroz' }, { food: 'brownRice', name: 'arroz integral' }, { food: 'salad4', name: 'beterraba ralada' }, { food: 'salad3', name: 'agrião com manga' }, { food: 'meat2', name: 'filezinho de frango empanado' }, { food: 'cutFruit', name: 'melancia' }, { food: 'meat1', name: 'dobradinha' }, { food: 'salad1', name: 'escarola frisse' }, { food: 'bean', name: 'feijão' }, { food: 'garnish1', name: 'batata rustica II' }, { food: 'salad5', name: 'chucrute caseiro' }, { food: 'meat3', name: 'ovo assado' } ]
排序要求
需要按照以下orderBy数组定义的类别顺序对上述数组排序:
let orderBy = ["salad", "cutFruit", "dessert", "syrup", "coldSauce", "hotSauce", "garnish", "rice", "bean", "meat"];
尝试的实现代码
我自行编写的排序代码如下,但未达到预期效果:
let orderBy = ["salad", "cutFruit", "dessert", "syrup", "coldSauce", "hotSauce", "garnish", "rice", "bean", "meat"]; data.sort((a, b) => { let fa = a.food.toLowerCase(), fb = b.food.toLowerCase(); orderBy.forEach(function(order, i) { if (fa.includes(orderBy[i]) && fb.includes(orderBy[i + 1])) { return -1; } else if (fa.includes(orderBy[i + 1]) && fb.includes(orderBy[i])) { return 1; } else { return 0; } }) // return fa < fb ? -1 : fa > fb ? 1 : 0; });
可行的解决方案
最终找到的有效解决方案代码:
food.sort((a, b) => { let fa = a.food.toLowerCase(); let fb = b.food.toLowerCase(); return fa < fb ? -1 : fa > fb ? 1 : 0; }); let orderBy = ["salad", "coldSauce", "hotSauce", "garnish", "rice", "brownRice", "bean", "meat", "dessert", "syrup", "cutFruit", "juice"]; const foodOrderly= []; orderBy.forEach(function (order) { food.forEach(function (point) { if (point.food.includes(order)) { foodOrderly.push(point); } }); });
内容的提问来源于stack exchange,提问作者Daniela Gross
相关产品推荐
相关产品推荐

