Tengo una matriz que contiene varios objetos con varios campos, y estoy tratando de ordenar la matriz en orden descendente desde el valor de "Vistas" más grande hasta el más bajo. pero cuando ejecuto mi código, genera algunos en orden, pero la mayoría son aleatorios. Hay muchas más filas de matriz en mi proyecto si eso pudiera afectarlo.
list = [{title: "Test1", views: "25"}, {title: "Test2", "105"}, {title: "Test3", views: "12"}] var len = list.length - 1; list.sort(function (a, b) { return a.views.localeCompare(b.views) || b.views - a.views; }); for(var x = 0; x < len; x++) { displayFunc(list[x].title, list[x].views); }Salida deseada:
{title: "Test2", views: "105"}, {title: "Test1", "25"}, {title: "Test3", views: "12"}Como se menciona en los comentarios, no necesita una comparación local aquí:
const list = [{title: "Test1", views: "25"}, {title: "Test2", views: "105"}, {title: "Test3", views: "12"}] console.log(list.sort((a,b)=>{ return b.views - a.views }));Tienes algunos errores en tu código. Corregí su versión y le doy una versión algo mejor y más moderna.
const list = [{title: "Test1", views: "25"}, {title: "Test2", views: "105"}, {title: "Test3", views: "12"}]; var len = list.length; const list_sorted = list.sort(function (a, b) { return parseInt(b.views, 10) - parseInt(a.views, 10); }); for(var x = 0; x < len; x++) { console.log(list[x].title, list[x].views); } /// Better list .map(el => ({ ...el, views: parseInt(el.views, 10) })) .sort((a,b) => b.views - a.views) .forEach(el => console.log(el.title, el.views));Podemos usar cualquier clave disponible en el objeto para ordenar. Según su requisito, aquí se usa 'ver',
const list = [{title: "Test1", views: "25"}, {title: "Test2", views: "105"}, {title: "Test3", views: "12"}] console.log(list.sort((a, b) => b.views - a.views));