Tengo una matriz con un montón de coches. Sin embargo, la propiedad Model contiene palabras innecesarias que necesitan limpieza.
Aquí está la matriz:
const cars = [{ Id: 1, Model: 'Transit 350 L3 Van' }, { Id: 2, Model: 'Transit Custom 300 L2' }, { Id: 3, Model: 'Transit Connect' } ];Aquí hay una lista de cómo debería ser el nombre:
const cleanNames = ['Transit Van', 'Transit Custom', 'Transit Connect'] Necesito algún tipo de función que pueda limpiar la cadena del modelo y devolverla si hay una coincidencia. Mi problema es que el uso includes('Transit') da coincidencia con todos e includes('Transit van') no coincide con ninguno. Nota: las palabras fuera de las de cleanNames son dinámicas.
¿Cómo me acerco a esto?
Si puede cambiar su matriz cleanNames para que sea una matriz de objetos que coincidan con una expresión regular con el reemplazo que desea, es bastante fácil usarlo para hacer coincidir/reemplazar las cadenas:
const cars = [{ Id: 1, Model: 'Transit 350 L3 Van' }, { Id: 2, Model: 'Transit Custom 300 L2' }, { Id: 3, Model: 'Transit Connect' }, { Id: 4, Model: 'Test' } ]; const cleanNames = [ {find:'Transit.*Van',replace:'Transit Van'}, {find:'Transit Custom.*',replace:'Transit Custom'}, {find:'Transit Connect', replace: 'Transit Connect'} ] const fixModel = (model, replacements) => { var match = replacements.find(r => new RegExp(r.find).exec(model)); if(match) return match.replace; return model } const result = cars.map(car => ({ ...car, Model: fixModel(car.Model, cleanNames) })); console.log(result);Puede verificar si todas las palabras de un "nombre limpio" están incluidas en el modelo de un automóvil con este código:
if (cleanName.split(' ').every(word => car.Model.includes(word)) { // This is a match }Supongo que cleanNames significa palabras sin números, para eso puedes usar RegEX.
const cars = [{ Id: 1, Model: 'Transit 350 L3 Van' }, { Id: 2, Model: 'Transit Custom 300 L2' }, { Id: 3, Model: 'Transit Connect' } ]; cars.forEach(car => { // regex to match words that contain numbers car.Model = car.Model.replace(/\S*\d\S*/g, ''); // regex to remove extra spaces car.Model = car.Model.replace(/\s+/g, ' ').trim(); }) console.log(cars)