Проблема с отображением массива массивов в один массив

#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>