Creé una matriz de matrices a partir de una llamada de API. La matriz principal es arrStories. Cuando muestro la matriz principal en console.log, se ve así:
[] Cuando hago clic en la pequeña flecha junto a [] , obtengo todas las matrices secundarias. Cada uno se parece a esto:
0: Array(4) 0: "08 Apr 2019" 1: "Avoiding those surprise bills when you stumble out of your insurance network" 2: "https://url" 3: "https://url-of-image" length: 4 [[Prototype]]: Array(0)Sin embargo, cuando trato de obtener la longitud de la matriz principal:
console.log(arrStories.length); //returns 0¿¿Lo que ha sucedido??
Así es como llené mis arreglos:
$.getJSON('my-api', function(data) { getStories(data); //push stories into an array of arrays }); orderStories(arrStories); //order by date descending function getStories(data) { for (var i = 0; i < data.articles.length; i++) { var pubDate = data.articles[i].publishedDate; pubDate = pubDate.slice(5); pubDate = pubDate.substring(0, pubDate.length - 15); arrStory.push(pubDate, data.articles[i].title, data.articles[i].link, data.articles[i].images[0].url); //push values into array arrStories.push(arrStory); //push array into parent array arrStory = []; //clear original array } } function orderStories(arrStories) { arrStories.sort(function(a, b) { var dateA = new Date(a.date), dateB = new Date(b.date) return dateA - dateB; }); }No tiene un objeto con .date y necesita procesar todo dentro de la función getJSON
Es probable que quieras esto
function getStories(data) { return data.map(article => { var pubDate = data.articles[i].publishedDate; pubDate = pubDate.slice(5); pubDate = pubDate.substring(0, pubDate.length - 15); return { date: pubDate, title: article.title, link: article.link, imageUrl: article.images[0].url } }) } function orderStories(arrStories) { arrStories.sort(function(a, b) { var dateA = new Date(a.date), dateB = new Date(b.date) return dateA - dateB; }); } $.getJSON('my-api', function(data) { const arrStories = getStories(data) orderStories(arrStories) // here you can process arrStories });Creo que es un problema de su devolución de llamada $.getJSON después de llamar sincrónicamente a orderStories en la siguiente línea. Creo que desea poner orderStories en la devolución de llamada $.getJSON
Creo que estás ordenando las historias antes de recibirlas.
Otro enfoque podría ser algo como esto
async function getData () { return new Promise(resolve => { $.getJSON('my-api', resolve) }; } getData().then(data => { const stories = getStories(data); const orderedStories = getOrderedStories(stories); });