var testData = [{'date': '10:45', 'electricity': 0.49, 'temp': 49}, {'date': '11:00', 'electricity': 0.14, 'temp': 50}, {'date': '11:15', 'electricity': 0.87, 'temp': 35}] function findData(time){ testData.forEach(function(item){ if(item['date'] == time){ console.log('item: ', item); var result = new Array(item['electricity'], item['temp']) console.log('result: ', result) return result; } }) } var a = findData('10:45'); console.log(a)¿Alguna idea de por qué console.log (a) da indefinido? Investigué un poco pero no obtuve la respuesta :(
No puede regresar de una devolución de llamada para Array#forEach y necesita al menos una declaración de devolución en el bloque de funciones para obtener un valor diferente como undefined .
En su lugar, podría encontrar el objeto con Array#find , desestructurar las propiedades deseadas y devolver una matriz de valores.
function findData(data, time) { const result = data.find(({ date }) => date === time); if (result) { const { electricity, temp } = result; return [electricity, temp]; } } var testData = [{ date: '10:45', electricity: 0.49, temp: 49 }, { date: '11:00', electricity: 0.14, temp: 50 }, { date: '11:15', electricity: 0.87, temp: 35 }] var a = findData(testData, '10:45'); console.log(a)Tu función necesita devolver algo. Además, devolver algo de la devolución de llamada forEach() no lo hará; tienes que almacenar ese resultado en una variable que sea visible para findData() :
function findData(time){ var r; testData.forEach(function(item){ if(item['date'] == time){ console.log('item: ', item); var result = new Array(item['electricity'], item['temp']) console.log('result: ', result) r = result; } }) return r; }Debido a que no detuvo el ciclo forEach después de encontrar el resultado, el ciclo continúa con el siguiente índice. Hay muchas maneras de lograr el resultado que necesita. Array.find es una forma.
var testData = [{'date': '10:45', 'electricity': 0.49, 'temp': 49}, {'date': '11:00', 'electricity': 0.14, 'temp': 50}, {'date': '11:15', 'electricity': 0.87, 'temp': 35}] function findData(time){ const foundItem = testData.find(function(item){ return item['date'] == time; }); console.log('item: ', foundItem); const result = new Array(foundItem['electricity'], foundItem['temp']) console.log('result: ', result) return result; } var a = findData('10:45'); console.log(a)