#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. Привет, Шубхам! Всегда фокусируйтесь на том, чтобы писать меньше и достигать большего. Проверьте другой опубликованный ответ. Функция сопоставления действительно помогает 🙂