You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依据指定数组顺序对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:25:38