aquí está mi pregunta sobre cómo categorizar los datos de la matriz con la ayuda de otros elementos de datos de la matriz. Me confunde cómo comparar los dos conjuntos de datos de la matriz con el valor común.
¿Cómo puedo acceder al animal # en referenceBasedValues y cómo comparar con los elementos de referenceData ?
const referenceData = ['animal#', 'flower#' , 'Cats#', 'dogs/colorDogs/'] const referenceBasedValues = [{ref : 'animal#cow', value : 'Cow'}, {ref : 'animal#pig', value : 'Pig'}, {ref : 'animal#hourse', value : 'Hourse'}, {ref : 'flower#rose', value : 'Rose'}, {ref : 'flower#leafRose', value : 'Leaf Rose'}, {ref : 'Cats#bigcat', value : 'Big cat'}, {ref : 'Cats#smallcat', value : 'Small Cat'}, {ref : 'dogs/colorDogs/whiteDog', value : 'White dog'}, {ref : 'dogs/colorDogs/BlackDog', value : 'Black dog'},]Estoy esperando la salida como esta
const finalData = [{reference : 'animal#' , values :['Cow' , 'Pig' ,'Hourse']}, {reference : 'flower#' , values :['Rose' , 'Leaf Rose' ,'Hourse']}, {reference : 'Cats#' , values :['Big cat' , 'Small Cat']}, {reference : 'dogs/colorDogs/' , values :['White dog','Black dog']} ] puedo acceder a animal#, flower#, Cats# con substring(0 , referenceData[i].reference.lastIndexOf("#"))
pero no puedo acceder a dogs/colorDogs/ palabra en matriz mientras se filtra
Si alguno da respuesta por este tan apreciable
// v1
const finalData = referenceData.map(reference => { const re = new RegExp('^' + reference); const values = referenceBasedValues.filter(base => re.test(base.ref)).map(base => base.value); return { reference, values, }; });// v2
const re = new RegExp(`^(${referenceData.join('|')})`); const finalData = Object.entries(referenceBasedValues.reduce((obj, { ref, value }) => { const match = re.exec(ref); if (match) { let key = match[0]; obj[key] ??= []; obj[key].push(value); } return obj; }, {})).map(([reference, values]) => ({ reference, values }));