sortby remove from empty desc array all javascript lodash

javascript - empty - lodash remove from array



Lodash: ¿cómo hacer una clasificación sin distinción entre mayúsculas y minúsculas en una colección usando orderBy? (3)

La documentation especifica que puede pasar una función como "iteratee":

[iteratees = [_. identity]] (Array [] | Función [] | Object [] | string []): Los iteratees para ordenar.

Entonces puedes hacer

const users = [ { name: ''A'', age: 48 }, { name: ''B'', age: 34 }, { name: ''b'', age: 40 }, { name: ''a'', age: 36 } ]; const sortedUsers = _.orderBy(users, [user => user.name.toLowerCase()], [''desc'']); console.log(sortedUsers);

<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>

Verifiqué esta respuesta, pero para lograr el mismo resultado, que es obtener una clasificación que no orderBy entre mayúsculas y minúsculas, necesito usar orderBy lugar de sortBy ya que brinda la capacidad de especificar el orden de clasificación .

La única forma que encontré para lograrlo fue crear una matriz clonada "intermedia" asignada a minúsculas el name :

const users = [ { name: ''A'', age: 48 }, { name: ''B'', age: 34 }, { name: ''b'', age: 40 }, { name: ''a'', age: 36 } ]; let lowerCaseUsers = _.clone(users); lowerCaseUsers = lowerCaseUsers.map((user) => { user.name = user.name.toLowerCase(); return user; }); const sortedUsers = _.orderBy(lowerCaseUsers, [''name''], [''desc'']); console.log(sortedUsers);

Esto parece realmente costoso e incluso será más complejo con múltiples clasificaciones y nombres de propiedades dinámicas.

¿Hay una idea mejor?

Aquí hay un Plunker: https://plnkr.co/edit/i1ywyxjFctuNfHtPTcgG


Para ordenar Por múltiples propiedades.

const users = [ { name: ''A'', age: 48 }, { name: ''B'', age: 34 }, { name: ''b'', age: 40 }, { name: ''a'', age: 36 } ]; const sortedUsers = _.orderBy(users, [user => user.name.toLowerCase(), ''age''], [''desc'', ''asc'']); console.log(sortedUsers);


Puede combinar el ejemplo de Felix Kling con la función _.get para ordenar por atributos dinámicos anidados:

const _ = require(''lodash''); let test = [{ a: {b:''AA''}},{a: {b:''BB''} }, {a: {b: ''bb''}}, {a:{b:''aa''}}]; let attrPath = ''a.b''; _.orderBy(test, [item => _.get(item, attrPath).toLowerCase()]);