Получить элемент в подмассиве и вернуть в основной массив

У меня проблема, когда получить элемент в подмассив и вернуть обратно в основной массив с помощью JavaScript. У меня есть такой массив:

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

Я хочу получить такой результат: ['1595','8886','1112']

Но когда я использую этот код:

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

Результат: ['1595,8886', '1112']

Кто-нибудь может мне помочь?

Ответы

Ответ 1

Вы можете деструктурировать массив и взять остальные без первого элемента и сгладить этот массив, используя Array.flatMap.

var array = [['1st', '1595', '8886'], ['2nd', '1112']],
    result = array.flatMap(([_, ...a]) => a);

console.log(result);

Ответ 2

Вместо join() используйте Array.prototype.flat() для возвращенного результата 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);

Ответ 3

Вы можете использовать Array.prototype.flat, а затем Array.prototype.filter, чтобы избавиться от нечисловых данных в ваших подмассивах:

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

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

Ответ 4

Вы также можете использовать array.reduce и использовать его следующим образом:

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

Дело в том, что array.map возвращает результат для каждого элемента в массиве. Итак, в вашем примере это имеет два цикла:

  1. ['1st', '1595', '8886'] → возвращает 1595,8886, потому что вы использовали join()
  2. ['2nd', '1112'] → возвращает '1112' также потому, что вы использовали join()

И вы получите это в массиве → ['1595,8886', '1112'].

Ответ 5

array_demo.reduce((acc, array_element) => acc.concat(array_element.slice(1)), [])

Ответ 6

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)

Ответ 7

когда нам нужно одно накопленное значение, мы можем использовать функции сокращения.

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

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

console.log(l);