Quiero realizar un seguimiento de los cambios de "resultados". Si la longitud de los resultados aumenta, la matriz se sobrescribirá y se guardará. Si la longitud disminuye, la matriz se sobrescribirá, pero el nuevo valor no se guardará.
playlists = []; results = simpleMysqlQuery(); setinterval{ update(playlists, results); } function update(playlists, results){ if(playlists.length != results.length){ playlists = reWritePlaylists(results, playlists); } } function reWritePlaylists(results, playlists){ results.forEach(function(item, i, arr){ playlists[i] = new Object(); playlists[i]['id'] = results[i]['id']; playlists[i]['name'] = results[i]['name']; }); if(playlists.length > results.length){ playlists = playlists.slice(0, results.length); } return playlists; }Cuando usa el slice y crea una nueva matriz, la matriz recién creada ya no es una referencia a la matriz original, por lo que el parámetro de playlists de reproducción en la update ya no se refiere a la misma instancia de matriz que la variable de playlists de reproducción fuera de la función. Prueba esto:
playlists = []; results = simpleMysqlQuery(); setinterval{ playlists = update(playlists, results); } function update(playlists, results){ if(playlists.length != results.length){ playlists = reWritePlaylists(results, playlists); } return playlists } function reWritePlaylists(results, playlists){ results.forEach(function(item, i, arr){ playlists[i] = new Object(); playlists[i]['id'] = results[i]['id']; playlists[i]['name'] = results[i]['name']; }); if(playlists.length > results.length){ playlists = playlists.slice(0, results.length); } return playlists; }Actualice la función reWritePlaylists como se muestra a continuación:
function reWritePlaylists(results, playlists){ playlists.splice(0, results.length); results.forEach(function(item, i, arr){ playlists[i] = new Object(); playlists[i]['id'] = results[i]['id']; playlists[i]['name'] = results[i]['name']; }); return playlists; }¡Encontré el wae!
function reWritePlaylists(results, playlists){ playlists.splice(0, playlists.length); results.forEach(function(item, i, arr){ playlists[i] = new Object(); playlists[i]['id'] = results[i]['id']; playlists[i]['name'] = results[i]['name']; }); return playlists; }