Сортировка многомерного массива в JavaScript?

1

Я новичок в программировании, и я только что разработал многомерную проблему с массивом, используя чистый 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();
Теги:
arrays
multidimensional-array
for-loop
sorting

3 ответа

0
Лучший ответ

Вы можете выполнить итерацию вложенного массива и проверить, является ли элемент массивом, а затем снова вызвать функцию для внутреннего массива.

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);
0

Необычный подход 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);
0

Рекурсивную функцию можно использовать для выравнивания массива.

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню