Tengo una serie de cadenas.
Por ejemplo column_list=["ab","bc","cd","asv_a","asv_f","asv_l","asv_x", "xy","yz"] .
Ahora tengo otra matriz con solo el valor "asv_" (que puede repetirse o ser único).
Por ejemplo new_column = ["asv_b", "asv_f", "asv_s"] .
Ahora quiero crear una nueva matriz concatenando la matriz new_column a column_list de modo que todos los valores asv_ estén juntos en el medio y sean únicos.
Gastos esperados -
result = ["ab","bc","cd","asv_a","asv_f","asv_l","asv_x","asv_b", "asv_s", "xy","yz"]Puede usar el método mergedArr para crear una matriz con Array.prototype.reduce() para mantener el orden y luego con Object.values() y Array.prototype.flat() para generar el result como un conjunto de valores únicos
Código:
const column_list = ["ab","bc","cd","asv_a","asv_f","asv_l","asv_x", "xy","yz"] const new_column = ["asv_b", "asv_f", "asv_s"] const mergedArr = (arr, newArr) => Object .values( arr.reduce( (a, c, i) => (a[c.startsWith('asv_') ? 1 : !a[1].length ? 0 : 3].push(c), a), [[], [], newArr, []] ) ) .flat() const result = [...new Set(mergedArr(column_list, new_column))] console.log(result)Primero, cree un conjunto de valores asv_* en column_list para usar en la eliminación de duplicados
const asvValues = new Set(column_list.filter(v => v.startsWith("asv_")));Luego filtre los duplicados
const inserts = new_column.filter(v => !asvValues.has(v)); Ahora, busque el índice de la última entrada asv_
const lastAsv = column_list.lastIndexOf([...asvValues].pop());Ahora use splice() para insertar la matriz filtrada después de la posición encontrada
column_list.splice(lastAsv + 1, 0, ...inserts); const column_list=["ab","bc","cd","asv_a","asv_f","asv_l","asv_x", "xy","yz"]; const new_column = ["asv_b", "asv_f", "asv_s"]; const asvValues = new Set(column_list.filter((v) => v.startsWith("asv_"))); const inserts = new_column.filter((v) => !asvValues.has(v)); const lastAsv = column_list.lastIndexOf([...asvValues].pop()); column_list.splice(lastAsv + 1, 0, ...inserts); console.log(column_list);