Tratando de averiguar cómo recuperar una cantidad máxima de registros de una matriz de objetos
Digamos que tengo una variedad de objetos como este (he reducido la cantidad para facilitar la lectura, pero puede haber cientos)
[ { name: 'Roger East', kick_off: 2021-10-01T14:00:00.000Z }, { name: 'Anthony Taylor', kick_off: 2021-10-01T14:00:00.000Z }, { name: 'Mike Dean', kick_off: 2021-09-20T14:00:00.000Z }, { name: 'Roger East', kick_off: 2021-09-19T14:00:00.000Z }, { name: 'Mike Dean', kick_off: 2021-08-10T14:00:00.000Z }, { name: 'Anthony Taylor', kick_off: 2021-08-09T14:00:00.000Z } ] Para mi ejemplo, es posible que solo desee recuperar 1, 2, 3 o 4 registros de cada name único (ordenados por la última fecha de inicio, aunque están en orden de inicio en la matriz, por lo que es posible que no sea necesario tener esa lógica)
Entonces, digamos que en mi objeto original tengo 100 registros para Roger East, 90 registros para Mike Dean y 50 registros para Anthony Taylor. Me gustaría devolver los primeros 3 registros para cada nombre en la matriz (espero que tenga sentido)
Entonces terminaría con
[ { name: 'Roger East', kick_off: 2021-10-01T14:00:00.000Z }, { name: 'Roger East', kick_off: 2021-10-01T14:00:00.000Z }, { name: 'Roger East', kick_off: 2021-09-20T14:00:00.000Z }, { name: 'Mike Dean', kick_off: 2021-09-19T14:00:00.000Z }, { name: 'Mike Dean', kick_off: 2021-08-10T14:00:00.000Z }, { name: 'Mike Dean', kick_off: 2021-08-10T14:00:00.000Z }, { name: 'Anthony Taylor', kick_off: 2021-08-09T14:00:00.000Z }, { name: 'Anthony Taylor', kick_off: 2021-08-09T14:00:00.000Z }, { name: 'Anthony Taylor', kick_off: 2021-08-09T14:00:00.000Z } ]Gracias
Aquí estás:
let data1 = [ { name: 'Roger East', kick_off: '2021-10-01T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-01T14:00:00.000Z' }, { name: 'Mike Dean', kick_off: '2021-09-20T14:00:00.000Z' }, { name: 'Roger East', kick_off: '2021-09-19T14:00:00.000Z' }, { name: 'Mike Dean', kick_off: '2021-08-10T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-08-09T14:00:00.000Z' } ]; let data2 = [ { name: 'Roger East', kick_off: '2021-10-01T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-01T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-02T14:00:00.000Z' }, { name: 'Mike Dean', kick_off: '2021-09-20T14:00:00.000Z' }, { name: 'Roger East', kick_off: '2021-09-19T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-06T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-11-07T14:00:00.000Z' }, { name: 'Mike Dean', kick_off: '2021-08-10T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-08-09T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-22T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-24T14:00:00.000Z' }, ]; const limitEachNameByNumber1 = 1; const limitEachNameByNumber2 = 3; function receiveFilteredData(data, limit) { let filteredData = []; let counter = {}; for (let record of data) { if (!counter[record.name]) { counter[record.name] = 0; } if (counter[record.name] >= limit) { continue; } filteredData.push(record); counter[record.name] ++; } return filteredData; } console.log(receiveFilteredData(data1, limitEachNameByNumber1)); console.log(receiveFilteredData(data2, limitEachNameByNumber2));esto es lo que puede hacer con el map y el filter
let dataset = [{ name: 'Roger East', kick_off: '2021-10-01T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-10-01T14:00:00.000Z' }, { name: 'Mike Dean', kick_off: '2021-09-20T14:00:00.000Z' }, { name: 'Roger East', kick_off: '2021-09-19T14:00:00.000Z' }, { name: 'Mike Dean', kick_off: '2021-08-10T14:00:00.000Z' }, { name: 'Anthony Taylor', kick_off: '2021-08-09T14:00:00.000Z' } ] let names = [...new Set(dataset.map(d => d.name))] let firstuser = dataset.filter(x => x.name === names[0]) // use any index for unique entries with name let seconduser = dataset.filter(x => x.name === names[1]) let thirduser = dataset.filter(x => x.name === names[2]) console.log({ firstuser, seconduser, thirduser }) const src = [{ name: "Roger East", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-09-20T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-09-19T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-08-10T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-08-09T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-09-20T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-09-19T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-08-10T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-08-09T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-10-01T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-09-20T14:00:00.000Z" },{ name: "Roger East", kick_off: "2021-09-19T14:00:00.000Z" },{ name: "Mike Dean", kick_off: "2021-08-10T14:00:00.000Z" },{ name: "Anthony Taylor", kick_off: "2021-08-09T14:00:00.000Z" }]; const byName = src.reduce((acc, { name, kick_off }) => { if (!acc[name]) { acc[name] = []; } else { acc[name].push(kick_off); } return acc; }, {}); const result = Object.keys(byName).map((name) => byName[name].slice(0, 3).map(kick_off => ({ name, kick_off }))).flat() console.log(result)