Tengo valores de duración de fecha en el siguiente formato.
array1 = '[["2022-01-18","2022-01-21"],["2022-02-15","2022-02-17"], ...]';Y necesita convertirlo de la siguiente manera,
array2 = [ '2022-01-18 - 2022-01-21', '2022-02-15 - 2022-02-17', ... ]Para el trabajo hecho he seguido dos caminos,
formattedArray1 = array1.replace(/","/g, " - ").reduce((a, b) => a.concat(b), [])esto me da un error:
array2.reduce no es una función
formattedArray2 = [].concat.apply([], array1.replace(/","/g, " - ")); y esto me da el errorCreateListFromArrayLike llamado en no objeto
¡Para arreglar esto cualquier pensamiento sería muy apreciado!
Lo que tienes allí es una matriz serializada en JSON.
Puede analizarlo en una matriz y luego asignarlo al valor que desea
const array1 = '[["2022-01-18","2022-01-21"],["2022-02-15","2022-02-17"]]'; const arr = JSON.parse(array1); const array2 = arr.map(([from, to]) => `${from} - ${to}`); console.log(array2);Si tiene curiosidad (como yo) sobre el rendimiento de la plantilla literal frente a Array.prototype.join() , los resultados de https://jsbench.me están a continuación...
Plantilla literal
2678,21 ops/s ± 0,85 %
Lo más rápido
Array.prototype.join()
1150,62 operaciones/s ± 0,51 %
57,04 % más lento
array1 se almacena como String , por lo que debe convertirlo a Array para usar reduce u otros métodos de matriz.
array1 = '[["2022-01-18","2022-01-21"],["2022-02-15","2022-02-17"]]'; arr = JSON.parse(array1) formattedArray1 = arr.map((e) => e.join(" - ")) // ['2022-01-18 - 2022-01-21', '2022-02-15 - 2022-02-17']array1.replace(/","/g, " - ") devolverá una cadena), reduce solo funciona con Array.prototype , es por eso que obtienes reduce no es una función.array2.reduce no es un error de función.
Debe analizar la matriz antes de reducir.
const array1 = '[["2022-01-18","2022-01-21"],["2022-02-15","2022-02-17"]]'; const parsedArr = JSON.parse(array1); const result = parsedArr.map(date => date.join(" - ") ) console.log(result)