javascript - Obter item na sub-matriz e voltar à matriz principal




arrays (5)

Eu tenho um problema ao obter o item na sub-matriz e voltar à matriz principal por javascript. Eu tenho matriz como esta:

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
]

Quero obter resultados como este: ['1595','8886','1112']

Mas quando eu uso esse código:

array_demo.map(function(i) {
    return i.slice(1).join();
});

Resultado: ['1595,8886', '1112']

Alguém pode me ajudar ?


Use Array.prototype.reduce()

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
]

var reduced_array = array_demo.reduce((reducedArray, elem) => {
  elem.shift() // Remove the first item
  return reducedArray.concat(elem)
}, [])

console.log(reduced_array)


Em vez de join() use Array.prototype.flat() no resultado retornado de map() :

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
]
array_demo = array_demo.map(function(i) {
    return i.slice(1);
}).flat();
console.log(array_demo);

Em um revestimento usando a função Seta (=>) :

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
]
array_demo = array_demo.map(i => i.slice(1)).flat();
console.log(array_demo);


Você pode usar Array.prototype.flat seguido por um Array.prototype.filter para se livrar dos dados não numéricos em suas sub-matrizes:

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
];

const res = array_demo.flat().filter(n=> !isNaN(n));
console.log(res);

Poderíamos fazê-lo usando Array.prototype.reduce também, se seu objetivo é remover apenas o objeto no 0th índice:

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
];

const res = array_demo.reduce((r, [_, ...e]) => { r.push(...e); return r}, []);
console.log(res);


Você também pode usar array.reduce e usá-lo da seguinte maneira:

array_demo.reduce( function(prev, curr, index) {
  return prev.concat(curr.slice(1)); 
} ).slice(1);

A coisa é, array.map, retorna o resultado para cada elemento na matriz. Portanto, no seu exemplo, ele tem dois ciclos:

  1. ['1st', '1595', '8886'] -> retorna '1595,8886' porque você usou join ()
  2. ['2nd', '1112'] -> retorna '1112' também porque você usou join ()

E você obtém isso em uma matriz -> ['1595,8886', '1112'].


quando precisamos de um único valor acumulado, podemos usar funções de redução.

var array_demo = [
    ['1st', '1595', '8886'],
    ['2nd', '1112']
]

var l = array_demo.reduce((val, item)=> {
    return val.concat(item.slice(1));
},[]);

console.log(l);







arrays