Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Действия с многомерным массивом (https://javascript.ru/forum/misc/76710-dejjstviya-s-mnogomernym-massivom.html)

MC-XOBAHCK 05.02.2019 16:16

Действия с многомерным массивом
 
Здравствуйте!
У меня есть многомерный массив:
const arr = [
    ['a1', 'a2', 'a3', 'a4', 'a5'],
    ['b1', 'b2', 'b3'],
    ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'],
    ['d1']
];


Его можно как то автоматически объединить в один общий массив (сделать конкатенацию)?
Сейчас каждый "подмассив" приходится прописывать вручную вот так:
let concatArr = arr[0].concat(arr[1], arr[2], arr[3]);


Можно ли это как то сделать по другому, чтобы при добавлении нового "подмассива" в массив arr, не нужно было его дописывать и в это выражение?

рони 05.02.2019 16:27

MC-XOBAHCK,
https://developer.mozilla.org/ru/doc...cts/Array/flat

MC-XOBAHCK 05.02.2019 16:44

рони, круто - то что нужно.
Спасибо!

MC-XOBAHCK 05.02.2019 20:30

Нужна помощь.
Мой многомерный массив из переменной стал свойством объекта и теперь появились проблемы.
const test = {
    arr: [
        ['a1', 'a2', 'a3', 'a4', 'a5'],
        ['b1', 'b2', 'b3'],
        ['c1', 'c2', 'c3', 'c4', 'c5'],
        ['d1', 'd2'],
        ['e1', 'e2', 'e3', 'e4']
    ],

    save() {
        console.log(this.arr[2]); // → ['c1', 'c2', 'c3', 'c4', 'c5']
        console.log(this.arr[3]); // → undefined

        this.arr[0].concat(this.arr[1], this.arr[2]).forEach(el => el); // Проходит
        this.arr[3].forEach(el => el);  // Выдаёт ошибку 
    },

    event() {
        document.querySelector('#save').addEventListener('click', this.save.bind(this));
    }
}

test.event();

Наверное я неправильно обращаюсь к массиву.

В консоле ошибка:
Uncaught TypeError: Cannot read property 'forEach' of undefined - Невозможно прочитать свойство 'forEach' из неопределенного.

Подскажите пожалуйста, где я нарукожопил?

рони 05.02.2019 20:47

MC-XOBAHCK,
не могу получить ваши ошибки, код рабочий.

MC-XOBAHCK 05.02.2019 21:53

рони, Вы меня извините за суету, я нашёл ошибку.
Причина - синтаксическая ошибка. Между массивами [3] и [4] пропустил запятую.
Я перед тем как просить о помощи просидел в поиске ошибки 1,5 часа и столько же после вопроса. Вот только нашёл.
Синтаксис этого массива проверял тщательно несколько раз. Как не увидел что запятой нету, не пойму.

Malleys 06.02.2019 00:55

Цитата:

Сообщение от MC-XOBAHCK
Его можно как то автоматически объединить в один общий массив (сделать конкатенацию)?

let concatArr = [].concat(...arr);

MC-XOBAHCK 06.02.2019 13:48

Malleys, именно такой вариант синтаксиса искал изначально, но не разобрался в доках. Я полгода не использовал '...' и подзабыл синтаксис его применения. Зато теперь и это вспомнил и про flat узнал.
Спасибо!


Часовой пояс GMT +3, время: 18:47.