digamos que tengo la siguiente matriz de datos
["New York", "Madrid", "Roma"]
Y tengo otras 2 variables y otra matriz
firstValue = ''; middlesValues = [] lastValue = ''
producción
firstValue = 'New York' middlesValues = ['Madrid'] lastValue = 'Roma'
Y me gustaría, por ejemplo, poner el primer valor en la matriz cada vez en una variable, los valores medios en una matriz y el último valor en la última variable. Y si tengo solo dos valores en la matriz, poner solo el primer valor y el último en las 2 variables.
¿Cómo puedo proceder?
Use array.slice para obtener el subarreglo, devuelve una matriz vacía si solo tiene 2 elementos.
const array= ["New York", "Madrid", "Roma"]; const firstValue = array[0]; const middlesValues = array.slice(1, array.length - 1); const lastValue = array[array.length - 1]; console.log(firstValue); console.log(middlesValues); console.log(lastValue);
Use Array#shift
para obtener el primer elemento, Array#pop
para obtener el último y el resto serían los del medio:
const partition = (arr = []) => { const array = [...arr]; const firstValue = array.shift(); const lastValue = array.pop(); const middlesValues = array; return { firstValue, middlesValues, lastValue}; } console.log( partition(["New York", "Madrid", "Boston", "Roma"]) ); console.log( partition(["New York", "Madrid", "Roma"]) ); console.log( partition(["New York", "Madrid"]) ); console.log( partition(["New York"]) ); console.log( partition([]) );
El enfoque depende de si el OP quiere que los datos originales sean mutados o no.
La forma más corta de no mutar es usar una combinación de desestructuración de matriz y pop
...
let [firstValue, ...middlesValues] = array; let lastValue = middlesValues.pop();
posibles enfoques podrían ser...
// - approach does not mutate the original data. // - it does so by using array destructuring and `pop`. let sampleData = ["New York", "Madrid", "Roma", "Paris"]; let [firstValue, ...middlesValues] = sampleData; let lastValue = middlesValues.pop(); console.log({ firstValue, lastValue, middlesValues, sampleData }); sampleData = ["New York", "Madrid"]; [firstValue, ...middlesValues] = sampleData; lastValue = middlesValues.pop(); console.log({ firstValue, lastValue, middlesValues, sampleData }); console.log('\n'); // - approach does not mutate the original data. // - it does so by uitlizing `at` and `slice`. sampleData = ["New York", "Madrid", "Roma", "Paris"]; firstValue = sampleData.at(0); lastValue = sampleData.at(-1); middlesValues = sampleData.slice(1, -1); console.log({ firstValue, lastValue, middlesValues, sampleData }); sampleData = ["New York", "Madrid"]; firstValue = sampleData.at(0); lastValue = sampleData.at(-1); middlesValues = sampleData.slice(1, -1); console.log({ firstValue, lastValue, middlesValues, sampleData }); console.log('\n'); // - approach does mutate the original data. // - it does so by by choosing the proven way of `shift` and `pop`. sampleData = ["New York", "Madrid", "Roma", "Paris"]; firstValue = sampleData.shift(); lastValue = sampleData.pop(); middlesValues = sampleData; console.log({ firstValue, lastValue, middlesValues, sampleData }); console.log( '(middlesValues === sampleData) ?..', (middlesValues === sampleData) ); sampleData = ["New York", "Madrid"]; firstValue = sampleData.shift(); lastValue = sampleData.pop(); middlesValues = sampleData; console.log({ firstValue, lastValue, middlesValues, sampleData }); console.log( '(middlesValues === sampleData) ?..', (middlesValues === sampleData) );
.as-console-wrapper { min-height: 100%!important; top: 0; }