Quiero mover elementos a la parte superior de mi matriz cuando los valores se encuentran dentro de otra matriz.
const data = [ { value: 'BMW', count: 1 }, { value: 'AUDI', count: 1 }, { value: 'VAUXHALL', count: 1 }, { value: 'FIAT', count: 1 }, { value: 'HONDA', count: 1 }, { value: 'LANDROVER', count: 1 }, ]; const selected = [ 'AUDI', 'HONDA' ];Entonces, básicamente, lo anterior se convertirá en:
const data = [ { value: 'AUDI', count: 1 }, { value: 'HONDA', count: 1 }, { value: 'BMW', count: 1 }, { value: 'VAUXHALL', count: 1 }, { value: 'FIAT', count: 1 }, { value: 'LANDROVER', count: 1 }, ];Esto es lo que tengo en este momento, sin embargo, no funciona como se esperaba y no es agradable en absoluto:
let prepend = []; selected.forEach(selected => { for (let i = 0; i < data.length; i++) { if (data[i] && data[i].value === selected) { prepend.push(data[i]); delete data[i]; break; } } }) data.unshift(...prepend); data = data.filter(Boolean);Quiero hacer algo más limpio como esto:
return [...data].sort((a, b) => { });Puede aprovechar las operaciones aritméticas booleanas con Array#includes y Array#sort .
const data = [ { value: 'BMW', count: 1 }, { value: 'AUDI', count: 1 }, { value: 'VAUXHALL', count: 1 }, { value: 'FIAT', count: 1 }, { value: 'HONDA', count: 1 }, { value: 'LANDROVER', count: 1 }, ]; const selected = [ 'AUDI', 'HONDA' ]; data.sort((a, b) => selected.includes(b.value) - selected.includes(a.value)) console.log(data);