Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

291
Vistas
¿Cómo puedo ordenar una matriz de objetos en función de un orden de matriz?

Tengo la siguiente matriz de objetos:

 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' }
]

Necesito clasificar en orden de foods :

 let orderBy = ["salad", "cutFruit", "dessert", "syrup", "coldSauce", "hotSauce", "garnish", "rice", "bean", "meat"];

Mi intento:

 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;
});

Encontré la solución para esto:

 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);
 }
 });
}); 
almost 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

 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' }
]

let orderBy = ["salad", "cutFruit", "dessert", "syrup", "coldSauce", "hotSauce", "garnish", "rice", "bean", "meat"];

// a RegExp to seperate the group from the index.
const r = /^([az]+)(\d*)/i;

const sorted = data.slice().sort(({ food: a }, { food: b }) => {
 // match the group and the index
 const aa = a.match(r);
 const bb = b.match(r);

 // same group, sort by index
 if (aa[1] === bb[1]) {
 return aa[2] - bb[2];
 }

 // sort by index in orderBy
 return orderBy.indexOf(aa[1]) - orderBy.indexOf(bb[1]);
});

console.log(sorted);
// brownRice has an index of -1 and is therefore sorted to the top.
 .as-console-wrapper{top:0;max-height:100%!important}

almost 4 years ago · Santiago Trujillo Denunciar

0

Tomó ideas de respuestas que no funcionaron completamente y logró obtener una solución más simple:

 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' }
]

const orderBy = ["salad", "cutFruit", "dessert", "syrup", "coldSauce", "hotSauce", "garnish", "rice", "brownRice", "bean", "meat"];

data.sort((a, b) => {
 return value(a) > value(b)
})

function value(item) {
 return orderBy.indexOf(item.food.replace(/[0-9]/g, ''))
}

console.log(data)
 .as-console-wrapper { top: 0; max-height: 100%!important}

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda