Mi solución
export function sortByAvailabilityAndPrice(products) {
return [...products].sort((producta, productb) => (productb.inStock - producta.inStock || producta.price - productb.price));
}
¡Te damos la bienvenida a este reto!
¡Bienvenido al mundo de JavaScript!
Día 1
Variables, funciones y sintaxis básica
Tipos de datos
Playground - Retorna el tipo
Tipos de datos - pt 2
Día 2
Operadores
Hoisting y coerción
Playground - Calcula la propina
Alcance de las variables
Día 3
Condicionales
Playground - Calcula años bisiestos
Switch
Playground - Obten información de mascotas según su tipo
Ciclos
Playground - Dibuja un triangulo
Día 4
Arrays
Playground - Encuentra al michi mas famoso
Objetos
Playground - Obten el promedio de los estudiantes
Día 5 - Checkpoint
Playground - encuentra el palindromo más grande
Día 6
Reasignación y redeclaración
Modo estricto
Día 7
Debugging y manejo de errores
Programación funcional
Quiz: Día 7
Día 8
Closures
Playground - Crea una calculadora con closures
Higher order functions
Playground - Crea tu propio método map
Día 9
ECMAScript
TC39
Quiz: Día 9
Día 10 - Checkpoint
ES6
ES7
Playground - Task planner
Día 11
Asincronismo
Playground - Promesas
Manejando el asincronismo
Playground - Resuelve el callback hell usando promesas
Playground - Resuelve el callback hell usando async/await
Día 12
Arrays a profundidad
Métodos de arrays: Every, Find y findIndex
Playground - Válida el formulario
Día 13
Métodos de arrays: Includes, Join y concat
Playground - agrupa los productos
Métodos de arrays: Flat y FlatMap
Playground - Encuentra la ubicación del valor buscado
Día 14
Mutable functions
Playground - Modifica una lista de compras
Métodos de arrays: sort
Playground - Ordena los productos
Día 15 - Checkpoint
Playground - Sistema de reservaciones de un hotel
Día 16
Programación orientada a objetos en JavaScript
Objetos literales
Playground - Congela el objeto recursivamente
Día 17
Prototipos en JavaScript
Playground - Modifica el prototype de los arrays
Playground - Crea un auto usando clases
Día 18
Abstracción en JavaScript
Playground - Sistema de carrito de compras
Encapsulamiento en JavaScript
Playground - Encapsula datos de los usuarios
Día 19
Herencia en JavaScript
Playground - Jerarquía de animales
Polimorfismo en JavaScript
Playground - Sistema de pagos
Día 20 - Checkpoint
Playground - Agenda de vuelos
Día 21
Patrones de diseño
Sinlgeton y Factory pattern en JavaScript
Playground - Implementa singleton en un chat
Día 22
Adapter y Decorator pattern en JavaScript
Playground - Personaliza productos de una tienda
Builder y Protype pattern en JavaScript
Playground - Mejora el código usando builder pattern
Día 23
Facade y proxy pattern en JavaScript
Playground - Proxy en servicio de mensajería
Chain of responsability y Observer pattern en JavaScript
Playground - Implementación de Observador en Newsletter
Día 24 - Checkpoint
Playground - Crea un task manager con patrones de diseño
Día 25
Estructuras de datos en JavaScript
Playground - Crea tu propia implementación de un array
Hash tables en JavaScript
Playground - Implementación de una HashTable para Contactos
Día 26
Set en JavaScript
Playground - Remueve duplicados de una lista
Maps en JavaScript
Playground - Crea un organizador de tareas
Día 27
Singly Linked List en JavaScript
Playground - Agrega métodos a la singly linked list
Playground - Implementación de una singly linked list
Día 28
Stacks en JavaScript
Playground - Crea un stack para una playlist
Día 29
Queues en JavaScript
Playground - Crea una cola de emails
Día 30
¡Lo lograste!
Live Class
30 días de JS con Juan DC
30 días de JS con Nicobytes
30 días de JS con GNDX
30 días de JS con LeoCode
30 días de JS con Teffcode
Sesión: Cierre de los 30 días de JavaScript
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
LeoCode0
Aportes 70
Preguntas 0
Mi solución
export function sortByAvailabilityAndPrice(products) {
return [...products].sort((producta, productb) => (productb.inStock - producta.inStock || producta.price - productb.price));
}
Mi respuestas:
.
.
.
.
.
.
.
.
.
.
let sorted = [...products]
sorted.sort(function(a,b){
if(b.inStock > a.inStock) return 1;
if(b.inStock < a.inStock) return -1;
if(a.price > b.price) return 1;
if(a.price < b.price) return -1;
})
🛡️Escudo anti-spoilers🛡️
Mi solucion:
export function sortByAvailabilityAndPrice(products) {
return [...products].sort((a, b) => {
if (b.inStock != a.inStock)
return a.inStock ? -1 : 1
return (a.price - b.price)
})
}
Hola, dejo mi solucion
Caminito anti spoilers
🛴✨
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Llegamos 📍
const list = [...products];
list.sort((a, b) => a.price - b.price);
list.sort((a, b) => b.inStock - a.inStock);
return list
Acepto sugerencias 😃
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const productsSorted = [...products];
productsSorted.sort((a, b) => a.price - b.price)
productsSorted.sort((a, b) => b.inStock - a.inStock)
return productsSorted;
}
Mi solución
function sortByAvailabilityAndPrice(products) {
const orderProducts = [...products]
const inStock = [];
const outStock = [];
orderProducts.forEach(product => {
if(product.inStock == true) {
inStock.push(product);
} else {
outStock.push(product);
}
})
inStock.sort((a, b) => a.price - b.price);
outStock.sort((a,b) => a.price - b.price);
const productsByAvailability = [...inStock, ...outStock];
return productsByAvailability;
}
export function sortByAvailabilityAndPrice(products) {
const sortedProducts = [...products];
sortedProducts.sort((a, b) => {
// Ordenar por disponibilidad en inventario (true primero)
if (a.inStock && !b.inStock) {
return -1;
} else if (!a.inStock && b.inStock) {
return 1;
}
// Ordenar por precio ascendente
return a.price - b.price;
});
return sortedProducts;
}
Aqui esta mi solucion:
export function sortByAvailabilityAndPrice(products) {
const nuevoArray = [...products]
nuevoArray.sort((a, b) => a.price - b.price)
nuevoArray.sort((a, b) => b.inStock - a.inStock)
return nuevoArray
}
Mi solución
export function sortByAvailabilityAndPrice(products) {
let new_products = [...products].sort((a, b) => a.price - b.price)
let resultado = [...new_products].sort((a, b) => b.inStock - a.inStock)
return resultado
}
Mi solución:
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
let inStock = products.filter(product => product.inStock === true);
let outStock = products.filter(product => product.inStock === false);
inStock.sort((a, b) => a.price - b.price);
outStock.sort((a, b) => a.price - b.price);
let sortedProducts = inStock.concat(outStock);
return sortedProducts;
}
export function sortByAvailabilityAndPrice(products) {
let new_products = [...products].sort((a, b) => a.price - b.price)
return new_products.sort((a, b) => b.inStock - a.inStock);
}
Spoiler
…
…
…
…
…
…
function sortByAvailabilityAndPrice(products) {
// clasificar podructos
let productosDisponibles = products.filter(function(producto){
return producto.inStock == true
});
let productosNoDisponibles = products.filter(function(producto){
return producto.inStock == false
});
//ordenar productos disponibles
productosDisponibles.sort((a, b) => a.price - b.price);
//ordenar productos no disponibles
productosNoDisponibles.sort((a, b) => a.price - b.price);
//concatenar lista de productos
let productosOrdenados = productosDisponibles.concat(productosNoDisponibles);
return productosOrdenados;
}
const products = [
{ name: "product1", price: 10, inStock: true },
{ name: "product2", price: 20, inStock: false },
{ name: "product3", price: 15, inStock: true },
{ name: "product4", price: 5, inStock: false },
]
console.log(sortByAvailabilityAndPrice(products));
Array.prototype.filterInStock = function (inStock = true) {
return this.filter(product => product.inStock === inStock);
}
Array.prototype.sortByPrice = function (ord = 'ASC') {
return this.sort((a, b) => ord === 'ASC' ? a.price - b.price : b.price - a.price);
}
export const sortByAvailabilityAndPrice = (products) => {
const stock = products.filterInStock().sortByPrice();
const outStock = products.filterInStock(false).sortByPrice();
return stock.concat(outStock);
}
export function sortByAvailabilityAndPrice(products) {
const array1 = [...products]
.filter((e) => e.inStock === true)
.sort((x, y) => x.price - y.price);
const array2 = [...products]
.filter((e) => e.inStock === false)
.sort((x, y) => x.price - y.price);
return array1.concat(array2);
}
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
let listResult = [...products];
listResult.sort((a, b) => a.price - b.price);
listResult.sort((a, b) => b.inStock - a.inStock);
return listResult;
}
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
const orderedProducts = [...products];
orderedProducts.sort((a, b) => a.price - b.price);
orderedProducts.sort((a, b) => b.inStock - a.inStock)
return orderedProducts;
}
export function sortByAvailabilityAndPrice(products) {
const newArray = [...products]
newArray.sort((a, b) => a.price - b.price)
newArray.sort((a, b) => b.inStock - a.inStock)
return newArray;
}
dejo mi solucion!
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const inStock = products.filter(product => product.inStock === true)
const notInStrock = products.filter(product => product.inStock === false);
const sortedArray = [...inStock.sort((a, b) => a.price - b.price), ...notInStrock.sort((a, b) => a.price - b.price)]
return sortedArray;
}
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const prodoSort = [...products];
prodoSort.sort(function (a, b) {
if (a.inStock === b.inStock) {
return a.price - b.price;
} else {
return (a.inStock ? -1 : 1);
}
});
return prodoSort;
}
Otra manera sería esta=>
return [...products].sort((a, b) =>
a.inStock > b.inStock ? -1 :
a.inStock < b.inStock ? 1 :
a.price > b.price ? 1 :
a.price < b.price ? -1 : 0
);
Mi solución al reto:
export function sortByAvailabilityAndPrice(products) {
let ordenedByStock = [];
let ordenedByPrice = [];
ordenedByPrice = products.filter(item => item.inStock).sort((a, b) => a.price - b.price)
ordenedByStock = products.filter(item => !item.inStock).sort((a, b) => a.price - b.price)
ordenedByPrice = ordenedByPrice.concat(ordenedByStock)
return ordenedByPrice;
}
mi solucion:
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
👇
export function sortByAvailabilityAndPrice(products) {
let sortProducts = [...products]
return sortProducts.sort((a, b) => b.inStock - a.inStock || a.price - b.price)
}
Mi solución
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products){
const sortedArray= new Array(...products);
sortedArray.sort((a,b)=>a.price -b.price)
sortedArray.sort((a,b)=>b.inStock -a.inStock)
return sortedArray;
};
Hola, Mi solución al Reto:
💚💚💚
💚💚💚
💚💚💚
💚💚💚
💚💚💚
💚💚💚
💚💚💚
💚💚💚
💚💚💚💚💚💚
💚💚💚💚
💚💚
💚
export function sortByAvailabilityAndPrice(products) {
const productsSorted = [...products];
productsSorted.sort((productA, productB) => {
if (productA.inStock !== productB.inStock) {
return productA.inStock ? -1 : 1;
}
// console.log(`${productA.price} - ${productB.price}: ${ productA.price - productB.price}`)
return productA.price - productB.price;
});
return productsSorted;
}
Mi aporte:
-----------------------SPOILE--------------------------
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
let clon = [...products];
clon.sort((a) => {
if (a.inStock) {
return -1
}
else {
return 1
}
})
clon.sort((a, b) => {
if (a.inStock && b.inStock) {
return a.price - b.price;
}
if (!a.inStock && !b.inStock) {
return a.price - b.price;
}
})
return clon;
}
const newArray = [...products].sort((a, b) => b.inStock - a.inStock || a.price - b.price);
return newArray
Aquí mi versión:
V
V
V
V
V
V
V
V
V
V
export function sortByAvailabilityAndPrice(products) {
const newList = [...products]
newList.sort((a, b) => a.price - b.price)
newList.sort((a, b) => b.inStock - a.inStock)
return newList
}
function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const sortedProducts = [...products]
.sort((a, b) => a.price - b.price)
.sort((a, b) => b.inStock - a.inStock)
console.log(sortedProducts)
return sortedProducts
}
export function sortByAvailabilityAndPrice(products) {
return [...products]
.sort((a, b) =>{
const res = a.inStock !== b.inStock
? a.inStock === true ? -1 : 1
: a.price - b.price
return res
}
)
}
comparto mi solucion:
Les comparto mi solución. 😄
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
const OUT_OF_STOCK = products.filter((product) => !product.inStock);
const IN_STOCK = products.filter((product) => product.inStock);
OUT_OF_STOCK.sort((a, b) => a.price - b.price);
IN_STOCK.sort((a, b) => a.price - b.price);
const PRODUCTS = IN_STOCK.concat(OUT_OF_STOCK);
return PRODUCTS;
}
Este es mi solución
<function sortByAvailabilityAndPrice(products)
{
const inStockProducts = products.filter(element => element.inStock).sort((a,b) => a.price - b.price);
const outStockProducts = products.filter(element => !element.inStock).sort((a,b) => a.price - b.price);
return [...inStockProducts, ...outStockProducts];
}
>
para quienes se sienten estancados con este reto, les comparto esta referencia que me sirvió para encontrar la solución
Que tal esta solución? :
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
// Creamos una copia del array original para no modificarlo
const copy = products.slice();
// Definimos una función de comparación que primero ordena por disponibilidad
// en inventario (los productos en stock primero), y luego por precio ascendente
copy.sort((a, b) => {
if (a.inStock === b.inStock) {
return a.price - b.price;
} else {
return a.inStock ? -1 : 1;
}
});
return copy;
}
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
let zeroQ = products.filter((item) => !item.inStock);
let nonZeroQ = products.filter((item) => item.inStock);
zeroQ.sort((a, b) => a.price - b.price);
nonZeroQ.sort((a, b) => a.price - b.price);
return nonZeroQ.concat(zeroQ);
}
En mi solución utilice doble sort():
export function sortByAvailabilityAndPrice(products) {
const sorted_products = [...products];
return sorted_products.sort((a,b)=>a.price-b.price).sort((a, b) => {
if (a.inStock===b.inStock)
return 0;
if (a.inStock)
return -1;
else
return 1;
})
}
Mi solución, primero ordenar por precio y luego ordenar para que los que esten en stock esten de principio.
export function sortByAvailabilityAndPrice(products) {
let copiarray = new Array(...products);
copiarray.sort((a, b) => a.price - b.price);
copiarray.sort((a, b) => b.inStock - a.inStock);
return copiarray;
}
Aqui mi solución de principiante 3n 3 lineas:
let arrayCopy = new Array(...products);
let orderPrice1 = arrayCopy.sort((a, b) => a.price - b.price);
return orderPrice1.sort((b, a) => a.inStock - b.inStock);
🛡️Escudo anti-spoilers🛡️
*
Mi solución:
export function sortByAvailabilityAndPrice(products) {
let list = [...products];
list.sort((a, b) => a.price - b.price);
list.sort((a, b) => b.inStock - a.inStock);
return list
}
Hola, me gustaría compartir mi solución 😄
.
.
.
.
.
.
.
.
.
No es código bonito pero resuelve el problema… 😃
function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
let trueprod = [...products].filter(prod => prod.inStock === true).sort((a, b) => {
return a.price - b.price;
});
let falseprod = [...products].filter(prod => prod.inStock === false).sort((a, b) => {
return a.price - b.price;
})
return [...trueprod, ...falseprod];
}
aprendí con este reto que true equivale a 1 y false a 0 pero ya había hecho esta:
export function sortByAvailabilityAndPrice(products) {
const itemsAviable = products.filter(item => item.inStock).sort((a, b) => a.price - b.price)
const itemsUnAviable = products.filter(item => !item.inStock).sort((a, b) => a.price - b.price)
return itemsAviable.concat(itemsUnAviable)
}
pero es esta la manera mas correcta :
export function sortByAvailabilityAndPrice(products) {
return [...products].sort((producta, productb) => (productb.inStock - producta.inStock || producta.price - productb.price));
}
Mi solución
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const organizedProducts = [...products];
organizedProducts.sort((a, b) => a.price - b.price).sort((a, b) => b.inStock - a.inStock);
return organizedProducts;
}
Como true = 1 y false = 0, para JavaScript, se puede hacer la resta sin ningun problema.
Mi solución:
export function sortByAvailabilityAndPrice(products) {
let newList = [...products]
newList.sort((a, b) => a.price - b.price)
newList.sort((a, b) => b.inStock - a.inStock)
return newList
}
function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
let sort=[...products]
sort.sort((a, b) => a.price - b.price);
sort.sort((a, b) => b.inStock-a.inStock);
return sort;
return products;
}
MI SOLUCION 💪
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
const available = products.filter(product => product.inStock);
const notAvailable = products.filter(product => !product.inStock);
available.sort((a, b) => a.price - b.price);
notAvailable.sort((a, b) => a.price - b.price);
return available.concat(notAvailable);
}
Esta es mi solución, cuidado con los spoiler!:
.
.
.
.
.
.
.
.
.
.
.
Me gusta después de terminar el ejercicio leer los comentarios para ver otras soluciones y me sorprende como lo hicieron con un sort!!, mi resultado tiene algunos pasos extra pero igual funciona.
export function sortByAvailabilityAndPrice(products) {
let myProducts = [...products];
let avalibles = myProducts.filter(item => item.inStock)
let noAvalibles = myProducts.filter(item => !item.inStock);
avalibles.sort((a, b) => a.price - b.price);
noAvalibles.sort((a, b) => a.price - b.price)
return avalibles.concat(noAvalibles);
}
wooo
export function sortByAvailabilityAndPrice(products) {
let newproducts = [...products];
newproducts.sort(function (a, b) {
if (b.inStock > a.inStock) return 1;
if (b.inStock < a.inStock) return -1;
if (a.price > b.price) return 1;
if (a.price < b.price) return -1;
})
return newproducts;
}
mi solución:
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
return [...products]
.sort((productA, productB) => {
return (productB.inStock - productA.inStock) || (productA.price - productB.price);
})
}
Mi solución
.
.
.
.
.
.
function sortByAvailabilityAndPrice(products) {
const productList = new Array(...products)
const sortedProducts = productList.sort((a, b) => a.price - b.price).sort((a, b) => b.inStock - a.inStock)
return sortedProducts
}
Mi solución:
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
return Array.from(products).sort((a, b) => a.price - b.price).sort((a, b) => b.inStock - a.inStock)
}
Aquí mi solución al reto:
function sortByAvailabilityAndPrice(products) {
// filtrando todos los produts con stock
const productsWithStock = products.filter(item => item.inStock);
// filtrando todos los produts sin stock
const productsOutOfStock = products.filter(item => !item.inStock);
// aplicando ordenamiento ascendente a ambos grupos
productsWithStock.sort((a, b) => a.price - b.price);
productsOutOfStock.sort((a, b) => a.price - b.price);
//concatenando ambos arrays
return productsWithStock.concat(...productsOutOfStock);
}
😋Acá mi solución, no es tan corta en líneas de código,pero considero que mejora mucho la legibilidad de esta.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const availableProducts = products.filter((product) => product.inStock);
const noAvailableProducts = products.filter((product) => !product.inStock);
availableProducts.sort((a, b) => a.price - b.price);
noAvailableProducts.sort((a, b) => a.price - b.price);
return availableProducts.concat(noAvailableProducts);
}
Mi Solución…
function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
const availableProds = [];
const notAvailableProds = [];
products.forEach(prod => prod.inStock ? availableProds.push(prod) : notAvailableProds.push(prod));
availableProds.sort((prodA, prodB) => prodA.price - prodB.price);
notAvailableProds.sort((prodA, prodB) => prodA.price - prodB.price);
return [...availableProds, ...notAvailableProds];
}
¡Hola, Desafío cumplido 😃!
Objetivo
Mi solución,
Se detalla hasta abajo.⬇
⬇
⬇
⬇
⬇
⬇
⬇
⬇
⬇
⬇
⬇
export function sortByAvailabilityAndPrice(products) {
let result = [...products];
result.sort((a, b) => a.price - b.price);
result.sort((a, b) => b.inStock - a.inStock);
return (result);
}
Anti-Spoiler:
I’m trying to do it with a few lines of code .
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
return [...products].sort(
(a, b) => b.inStock - a.inStock || a.price - b.price
);
}
ANTISPOILER
.
.
.
.
.
.
.
.
.
const copyProducts = [...products];
console.log(copyProducts);
copyProducts.sort((a, b) => {
if (a.inStock === b.inStock) {
return a.price - b.price;
} else {
return b.inStock - a.inStock;
}
});
return copyProducts;
Solución… 😄
.
Para el reto, no se debe modificar el array original, puesto que el método sort() lo hace, utilizaremos el spread operator para generar una copia del array original.
,
Sobre esta copia, podremos realizar el ordenamiento con las condiciones correspondientes.
.
Retornamos el nuevo array ordenado.
.
export function sortByAvailabilityAndPrice(products) {
let sorted = [...products].sort((a, b) => a.price - b.price).sort((a, b) => b.inStock - a.inStock);
return sorted;
}
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
return [...products].sort((a, b) => {
if (a.inStock == b.inStock) {
return a.price - b.price
}
else {
return a.inStock ? -1 : 1
};
})
}
function sortByAvailabilityAndPrice(products) {
return [...products].sort((a,b)=>a.price-b.price).sort((a,b)=>b.inStock-a.inStock);
}
export function sortByAvailabilityAndPrice(products) {
let productsCopy = [...products];
productsCopy.sort((p1, p2) => {
return (p1.inStock == p2.inStock) ? p1.price - p2.price : (p1.inStock) ? -1 : 1;
});
return productsCopy;
}
.
. -------------------------
. Spoilers :3
. -------------------------
.
.
.
.
…
.
.
.
.
.
.
.
.
.
.
.
.
.
Mi solucion :3
export function sortByAvailabilityAndPrice(products) {
const productsSorted = [...products];
productsSorted.sort((a, b) => a.price - b.price)
productsSorted.sort((a, b) => b.inStock - a.inStock)
return productsSorted;
}
Solución
export function sortByAvailabilityAndPrice(products) {
// Tu código aquí 👈
let list = [...products];
list.sort((p1, p2) => (p1.price - p2.price));
list.sort((p1, p2) => (p2.inStock - p1.inStock));
return list;
}
Uhhhhhhhhhhhhhhhh baby!! Buenisimo reto, les dejo la solución abajo.
.
.
.
.
.
.
.
.
.
.
.
export function sortByAvailabilityAndPrice(products) {
return JSON.parse(JSON.stringify(products))
.sort((a, b) => a.price - b.price)
.sort((a, b) => b.inStock - a.inStock)
}
export function sortByAvailabilityAndPrice(products) {
let response = [...products];
response.sort(function (a, b) {
if (a.inStock && !b.inStock) return -1;
else if (a.inStock === b.inStock) return a.price - b.price;
else return 1;
});
return response;
}
Comparto mi solución!
.
.
.
.
.
.
.
.
.
.
Divido el arreglo de productos que recibo como parámetro en dos listas de productos. Una lista contiene los productos con stock y la otra los productos sin stock. Una vez obtenida la lista las ordena según su precio y retorna la lista de productos disponibles concatenada con la lista de productos sin stock
export function sortByAvailabilityAndPrice(products) {
//Inicializo los arreglos que van a almacenar los productos con y sin stock
const disponibles = []
const sinStock = []
//Si el producto tiene stock lo pusheo en disponibles, sino en sinStock
const procesarProducto = (producto) => {
(producto['inStock']) ? disponibles.push(producto):sinStock.push(producto)
}
//Ordena por precio un arreglo que recibe como parámetro
const ordenarProductos = (productos) => {
return productos.sort((a,b) => a.price-b.price)
}
//Ejecuta la función procesarProducto para cada elemento de products
products.forEach(producto => {
procesarProducto(producto)
})
//Retorna un array que concatena los productos disponibles con los productos sin stock
return ordenarProductos(disponibles).concat(ordenarProductos(sinStock))
}
Hola. Comparto mi solución
.
.
.
.
.
Consiste en
.
.
.
.
.
.
.
.
La creación de 2 buffers en los que almaceno elementos (.push) dependiendo del valor de ‘inStock’ (if-else) a medida que recorro el arreglo ‘productos’ con el forEach. Luego aplico un sorting por ‘price’ a cada arreglo y finalmente los concateno para dar la respuesta.
export function sortByAvailabilityAndPrice(products) {
let hay = []
let noHay = []
products.forEach(p => {
if (p.inStock) hay.push(p)
else noHay.push(p)
})
hay.sort((a, b) => a.price - b.price)
noHay.sort((a, b) => a.price - b.price)
return hay.concat(noHay)
}
Spoiler:
.
.
.
.
.
.
.
.
.
.
function sortByAvailabilityAndPrice(products) {
let arr = [...products].sort((a,b) => {
if(a.inStock === b.inStock){
return a.price < b.price ? -1 :
a.price > b.price ? 1 : 0;
}else{
return b.inStock - a.inStock;
}
});
return arr;
};
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?