#javascript #jquery
#javascript #jquery
Вопрос:
Не могли бы вы взглянуть на эту демонстрацию и сообщить мне, как я могу отобразить массив массивов в новый массив?
Я уже пробовал это, но, похоже, мне здесь чего-то не хватает
var array1 = [
[1, 4, 6, 78],
[5, 3, 9, 21],
[11, 77, 9, 20],
];
var arr2 = []
const map1 = array1.map(arr2.push(x => x ));
console.log(arr2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Ответ №1:
Самый простой способ добиться того, что вам требуется, — использовать flat()
:
var array1 = [
[1, 4, 6, 78],
[5, 3, 9, 21],
[11, 77, 9, 20],
];
var arr2 = array1.flat();
console.log(arr2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Однако следует отметить, что этот метод не поддерживается как в IE, так и в Edge, хотя полизаполнение доступно.
Ответ №2:
Сначала обратите внимание, что написанный вами код array1.map(arr2.push(x => x));
не имеет никакого смысла и не будет работать, потому что Array.map() должен принимать функцию в качестве аргумента, и вы передаете результат a push()
, т.е. Длину arr2
после нажатия на нее функции идентификации ( x => x
) . Итак, если вы можете, используйте Array.flat() вместо этого:
var array1 = [
[1, 4, 6, 78],
[5, 3, 9, 21],
[11, 77, 9, 20],
];
let array2 = array1.flat();
console.log(array2);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Или, альтернативно, Array.reduce() и Array.concat():
var array1 = [
[1, 4, 6, 78],
[5, 3, 9, 21],
[11, 77, 9, 20],
];
let array2 = array1.reduce((acc, curr) => acc.concat(curr), []);
console.log(array2);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Близкая идея к тому, что, я полагаю, вы хотели сделать, показана в следующем примере:
var array1 = [
[1, 4, 6, 78],
[5, 3, 9, 21],
[11, 77, 9, 20],
];
let array2 = [];
array1.forEach(innerArr => innerArr.forEach(v => array2.push(v)));
console.log(array2);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Ответ №3:
Вы можете использовать Array.prototype.concat.apply
, чтобы уменьшить количество внутренних массивов на единицу.
var array1 = [
[1, 4, 6, 78],
[5, 3, 9, 21],
[11, 77, 9, 20],
];
var arr2 = [].concat.apply([], array1);
console.log(arr2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>