Я новичок в программировании, и я только что разработал многомерную проблему с массивом, используя чистый javascript, но я думаю, что я сделал это слишком сложным и просто интересно, может ли кто-нибудь сказать мне, как вы думаете о моем методе, и у вас есть лучший способ сделать Это. проблема заключается в том, чтобы console.log все числа в массивах и массив [[[1,2], [3,4]], [[5,6]]]. Мой код приведен ниже, пожалуйста, разместите свои предложения, спасибо
var nestedArr = [[[1,2],[3,4]],[[5,6]]];
var nestedArrOne = nestedArr[0];
var nestedArrTwo = nestedArr[1];
var newArr = nestedArrOne.concat(nestedArrTwo);
function showAll(){
for(var i=0; i<newArr.length; i++){
for(var j=0; j<newArr[i].length; j++){
console.log(newArr[i][j]);
}
}
}
showAll();
Вы можете выполнить итерацию вложенного массива и проверить, является ли элемент массивом, а затем снова вызвать функцию для внутреннего массива.
function iter(array) {
var i; // declare index
for (i = 0; i < array.length; i++) { // iterate array
if (Array.isArray(array[i])) { // check if item is an array
iter(array[i]); // if so, call iter with item
continue; // and continue the loop
}
console.log(array[i]); // the wanted output
}
}
var nestedArr = [[[1, 2], [3, 4]], [[5, 6]]];
iter(nestedArr);
Необычный подход Haskellesque с "сопоставлением шаблонов оператором отдыха" может быть.
var flat = ([x,...xs]) => x ? [...Array.isArray(x) ? flat(x) : [x], ...flat(xs)] : [];
na = [[1,2],[3,[4,5]],[6,7,[[[8],9]]],10];
fa = flat(na);
console.log(...fa);
Рекурсивную функцию можно использовать для выравнивания массива.
let isArray = val => val.constructor === Array
let log = val => console.log(val)
let flatten = val =>
val
.reduce((acc, cur) =>
isArray(cur) ? [...acc, ...flatten(cur)] : [...acc, cur],
[])
// Running examples
let arrA = [[[1,2],[3,4]],[[5,6]]]
flatten(arrA).forEach(log)
log('-------------------')
let arrB = [[[1,2],[3,4]],[[5,6]],[7],[[[[9]]]]]
flatten(arrB).forEach(log)