Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.02.2019, 16:16
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Действия с многомерным массивом
Здравствуйте!
У меня есть многомерный массив:
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, не нужно было его дописывать и в это выражение?
Ответить с цитированием
  #2 (permalink)  
Старый 05.02.2019, 16:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

MC-XOBAHCK,
https://developer.mozilla.org/ru/doc...cts/Array/flat
Ответить с цитированием
  #3 (permalink)  
Старый 05.02.2019, 16:44
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

рони, круто - то что нужно.
Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 05.02.2019, 20:30
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Нужна помощь.
Мой многомерный массив из переменной стал свойством объекта и теперь появились проблемы.
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' из неопределенного.

Подскажите пожалуйста, где я нарукожопил?
Ответить с цитированием
  #5 (permalink)  
Старый 05.02.2019, 20:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,084

MC-XOBAHCK,
не могу получить ваши ошибки, код рабочий.
Ответить с цитированием
  #6 (permalink)  
Старый 05.02.2019, 21:53
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

рони, Вы меня извините за суету, я нашёл ошибку.
Причина - синтаксическая ошибка. Между массивами [3] и [4] пропустил запятую.
Я перед тем как просить о помощи просидел в поиске ошибки 1,5 часа и столько же после вопроса. Вот только нашёл.
Синтаксис этого массива проверял тщательно несколько раз. Как не увидел что запятой нету, не пойму.
Ответить с цитированием
  #7 (permalink)  
Старый 06.02.2019, 00:55
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от MC-XOBAHCK
Его можно как то автоматически объединить в один общий массив (сделать конкатенацию)?
let concatArr = [].concat(...arr);
Ответить с цитированием
  #8 (permalink)  
Старый 06.02.2019, 13:48
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кнопка отмена предыдущего действия другой кнопки Fisher_OK jQuery 4 12.05.2018 00:43
Как сделать 2 действия с задержкой swerk Общие вопросы Javascript 3 09.10.2017 13:53
Работа с массивом. Где ошибка ? Cepreu Общие вопросы Javascript 4 07.03.2015 17:17
Остановка выполнения скрипта до определенного действия пользователя. Matisumi Общие вопросы Javascript 3 28.01.2013 00:21
После первого действия скрипт перестает работать cyberx jQuery 6 12.06.2010 22:04