Получить элемент в подмассиве и вернуть в основной массив
У меня проблема, когда получить элемент в подмассив и вернуть обратно в основной массив с помощью 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 возвращает результат для каждого элемента в массиве. Итак, в вашем примере это имеет два цикла:
- ['1st', '1595', '8886'] → возвращает 1595,8886, потому что вы использовали join()
- ['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);