2017-01-20 3 views
3

У меня есть вложенное массив:Как правильно распечатать вложенный массив в javascript?

[1, 2, [3, 4, [5, [6]], 7], 8, 9] 

Как я мог напечатать его в элегантный способ выглядеть следующим образом:

[1, 2, 3, 4, 5, 6, 7, 8, 9] 
+1

Что вы не изящный способ? – epascarello

+0

«print» как в 'console.log' или« print », как вывод в html? – Jack

+0

'JSON.parse (" ["+ [1,2, [3,4, [5, [6]], 7], 8,9] .join (", ") +"] ")' – epascarello

ответ

1
function printArray(arr) { 
    if (typeof(arr) == "object") { 
     for (var i = 0; i < arr.length; i++) { 
      printArray(arr[i]); 
     } 
    } 
    else console.log(arr); 
} 

printArray([1,2,[3,4,[5,[6]],7],8,9]); 
+0

Я бы просто изменил 'document.write' на' console.log'. Очень плохо использовать «document.write» –

1

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

let a = [1, 2, [3, 4, [5, [6]], 7], 8, 9]; 
const flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []); 
console.log(flatten(a)); 

На самом деле, вы можете найти его здесь:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Update 1:

Вот еще одно решение.

function flatten(arr) { 
    var x; 
    x = JSON.stringify(arr); 
    x = "[" + x.replace(/[\[\]]/g, "") + "]"; 
    return JSON.parse(x); 
} 
console.log(flatten(a)); 
0

Это еще один способ сделать это с ES6:

var nested = [1, 2, [3, 4, [5, [6]], 7], 8, 9]; 

var flat = [].concat(nested); 

for(var i = 0; i < flat.length; i++) { 
    if(Array.isArray(flat[i])) { 
     flat.splice(i, 1, ...flat[i--]); 
    } 
} 

console.log(flat); 
+0

Результат: [1, 2, 3, 4, Array [2], 7, 8, 9] в хроме или [1, 2, 3, 4, [5 , [6]], 7, 8, 9] в firefox. –

+0

Да, видел, обновил ответ рабочим решением @ Y.C. – Yaser

0

решение @Yaser кажется очень элегантно. Только в случае, если вы хотите использовать функциональные рамки, вот пример использования ramda

const arr = R.flatten([1, 2, [3, 4, [5, [6]], 7], 8, 9]); 
console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9] 
0

При использовании node.js следующее дает мне почти то, что вы просили, за исключением того, что печатная продукция не имеет пробелы после запятых:

console.log('[%s]', [1, 2, [3, 4, [5, [6]], 7], 8, 9]); 

Вызывающие toString() на массиве может быть необходимо, чтобы получить те же результаты в других средах:

console.log('[%s]', [1, 2, [3, 4, [5, [6]], 7], 8, 9].toString()); 
+0

Для меня это отображает '[Array [5]]' в консоли. –

+0

См. Мой обновленный ответ. – cybersam

Смежные вопросы