Encontrar el mismo elemento de matriz en otra matriz y cambiarle el nombre para que sea incremental. en el siguiente script, me gustaría incrementar el mismo elemento a +1 dinámicamente sin poner manualmente "motor" para que se le cambie el nombre como "motor 1"
Para un ejemplo, caso de uso
//original array ["car","motor","bicycle","tricyle","motor"] //result should be ["car","motor","bicycle","tricyle","motor 1"]Este es el script que probé
let _temparr = ["car","motor","bicycle","tricyle","motor"] let _newarr = new Array(); let counter = 0; for(let i = 0 ; i < _temparr.length;i++){ // Push _temparr element to _newarr for(let a = 0; a < _newarr.length; a++){ // if _newarr consist of motor , increment counter +1 and push as "Motor 1" if(_newarr[i] === "motor"){ counter++ _newarr.push(_temparr[i] + counter) } } _newarr.push(_temparr[i]) La lógica con la que salí es, bucle _temparray y lo empujaré a un nuevo arrau que es :_newarr , dentro del primer bucle de _newarr si encuentra el mismo elemento en _temparray. el contador se incrementará. pero no estoy seguro de cuál es la mejor práctica para hacer esto. encontré algunos temas sobre el uso de const found = arr1.some(r=> arr2.includes(r)) pero esto se eliminará si tiene el mismo elemento
Puede mantener un contador para cada palabra/elemento y usar .map para crear la nueva matriz, actualizando cada elemento según sea necesario:
const counter = new Map(); console.log( ["car","motor","bicycle","tricyle","motor"].map( element => { if (!counter.has(element)) { counter.set(element, 1); return element; } const count = counter.get(element); counter.set(element, count+1); return element + " " + count; } ) );Tal vez podría considerar usar un Mapa :
const originalArray = ["car", "motor", "bicycle", "tricyle", "motor"]; const newArray = []; const counter = new Map(); originalArray.forEach(item => { if (counter.has(item)) { newArray.push(`${item} ${counter.get(item)}`); counter.set(item, counter.get(item) + 1); } else { newArray.push(item); counter.set(item, 1); } }); console.log(newArray);