Сопоставление Javascript с массивом

#javascript #arrays

#javascript #массивы

Вопрос:

У меня есть 3 массива ниже:

 arr1 = ['a', 'b', 'c'];
arr2 = ['y', 'j', 'k'];
arr3 = ['t', 'w', 'u'];
...
  

Я хочу сопоставить с тем же массивом:

 arr = [
  'a-y-t',
  'a-y-w',
  'a-y-u',
  ..
  'c-k-w',
  'c-k-u'
]
  

Как я могу это сделать?

Спасибо

Комментарии:

1. Что вы пытались сделать? Где вы застряли?

Ответ №1:

Используя flatMap его, вы можете добиться желаемого результата. Вот реализация:

 const arr1 = ['a', 'b', 'c'];
const arr2 = ['y', 'j', 'k'];
const arr3 = ['t', 'w', 'u'];

const result = arr1.flatMap(s=>arr2.flatMap(p=>arr3.flatMap(e=>`${s}-${p}-${e}`)));

console.log(result);  

Комментарии:

1. обратите внимание, что flatMap поддерживается только браузерами, выпущенными ~ не позднее 2019 года ( источник )

Ответ №2:

Вы могли бы использовать алгоритм для декартова произведения, который принимает произвольное количество массивов.

В конце преобразуйте вложенные массивы в нужный формат.

 const
    arr1 = ['a', 'b', 'c'],
    arr2 = ['y', 'j', 'k'],
    arr3 = ['t', 'w', 'u'],
    result = [arr1, arr2, arr3]
        .reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []))
        .map(a => a.join('-'));

console.log(result);  

Ответ №3:

прямо вперед

 const arr1 = ['a', 'b', 'c'];
const arr2 = ['y', 'j', 'k'];
const arr3 = ['t', 'w', 'u'];

let result = [];
arr1.forEach((list1)=> arr2.forEach((list2)=> arr3.forEach((list3)=>
                 result.push(`${list1}-${list2}-${list3}`)
               )
             )
          )

console.log(result);  

Комментарии:

1. Привет, Шубхам! Всегда фокусируйтесь на том, чтобы писать меньше и достигать большего. Проверьте другой опубликованный ответ. Функция сопоставления действительно помогает 🙂