Obtengo resultados diferentes al filtrar fechas únicas. Funciona correctamente en algunos casos e incorrecto en algunos, por ejemplo a continuación. No puedo averiguar cuál es el problema. El método de filtrado a continuación funciona bien en la mayoría de los casos pero falla en algunos. ..
Quiero obtener todas las fechas únicas de RatingsDaily["2"] y la matriz RatingsDaily["4"]
// This is the data const RatingsDaily = { "2": [ {"2021-12-24": 3.21}, {"2021-12-25": 3.19}, {"2021-12-28": 3.29}, {"2021-12-29": 3.24}, {"2021-12-30": 3.38}, ], "4": [ {"2021-12-24": 1.0}, {"2021-12-25": 1.0}, {"2021-12-26": 1.0}, {"2022-01-27": 2.0}, {"2022-01-03": 5.0}, {"2022-01-05": 1.0}, ] } // This is the way I am doing let labels = [] let uniquelabel = [] for (let i = 0; i < RatingsDaily["2"].length; i++) { uniquelabel.push(Object.keys(RatingsDaily["2"][i])); } for (let i = 0; i < RatingsDaily["4"].length; i++) { uniquelabel.push(Object.keys(RatingsDaily["4"][i])); } const useFilter = arr => { return arr.filter((value, index, self) => { return self.indexOf(value) === index; }); }; const result = useFilter(uniquelabel); console.log(result)Cualquier ayuda sería apreciada ... Gracias de antemano
Una breve alternativa:
const RatingsDaily = {"2": [{"2021-12-24": 3.21},{"2021-12-25": 3.19},{"2021-12-28": 3.29},{"2021-12-29": 3.24},{"2021-12-30": 3.38},], "4": [{"2021-12-24": 1.0},{"2021-12-25": 1.0},{"2021-12-26": 1.0},{"2022-01-27": 2.0},{"2022-01-03": 5.0},{"2022-01-05": 1.0}]} const result = [...new Set( // will make values unique Object.values(RatingsDaily).flat() // lists all entries .map(Object.keys).flat() // retains string dates only )] console.log(result);Podría ser mejor usar un Conjunto ya que está diseñado para mantener solo valores únicos. Además, es posible que tenga más tipos de calificaciones, por lo que podría ser mejor no codificar explícitamente 2 y 4, sino considerar las claves presentes en el objeto RatingsDaily . Una forma de ejemplo de hacerlo es la siguiente:
const RatingsDaily = {"2": [{"2021-12-24": 3.21},{"2021-12-25": 3.19},{"2021-12-28": 3.29},{"2021-12-29": 3.24},{"2021-12-30": 3.38},], "4": [{"2021-12-24": 1.0},{"2021-12-25": 1.0},{"2021-12-26": 1.0},{"2022-01-27": 2.0},{"2022-01-03": 5.0},{"2022-01-05": 1.0}]} const datesSet = new Set(); for (const rating of Object.keys(RatingsDaily)) { for (const dateObj of RatingsDaily[rating]) { datesSet.add(Object.keys(dateObj)[0]); } } const datesArr = Array.from(datesSet); console.log(datesArr);La matriz uniquelabel es una matriz de sub-matrices de un elemento. No creo que esto sea lo que pretendías; probablemente quería una matriz de cadenas (fechas), no una matriz de matrices. Para arreglar eso solo cambia dos líneas y estarás bien.
Cambio:
uniquelabel.push(Object.keys(RatingsDaily[n][i]));A:
uniquelabel.push(...Object.keys(RatingsDaily[n][i])); En otras palabras, use el operador de propagación para poner una cadena y no una matriz en uniquelabel .
MANIFESTACIÓN
// This is the data const RatingsDaily = { "2": [ {"2021-12-24": 3.21}, {"2021-12-25": 3.19}, {"2021-12-28": 3.29}, {"2021-12-29": 3.24}, {"2021-12-30": 3.38}, ], "4": [ {"2021-12-24": 1.0}, {"2021-12-25": 1.0}, {"2021-12-26": 1.0}, {"2022-01-27": 2.0}, {"2022-01-03": 5.0}, {"2022-01-05": 1.0}, ] }; // This is the way I am doing let labels = [] let uniquelabel = [] for (let i = 0; i < RatingsDaily["2"].length; i++) { uniquelabel.push(...Object.keys(RatingsDaily["2"][i])); } for (let i = 0; i < RatingsDaily["4"].length; i++) { uniquelabel.push(...Object.keys(RatingsDaily["4"][i])); } const useFilter = arr => { return arr.filter((value, index, self) => { return self.indexOf(value) === index; }); }; const result = useFilter(uniquelabel); console.log(result)