Можно ли избежать использования .map()
дважды по одному и тому же массиву, даже если компоненты, которые отображает map (), не являются братьями и сестрами?
Технически, да, это возможно. Но давайте посмотрим на то, что вы действительно оптимизируете здесь.
map
- это, по сути, цикл for
, который присваивает значения новому массиву:
// example
function map(transform) {
const ret = []
for (let i = 0; i < this.length; i++) {
ret.push(transform(this[i], i, this))
}
return ret
}
это означает, что вы можете заменить функцию map своей собственной функцией, которая запускает цикл и создает два массива:
function myMap(transform1, transform2) {
const r1 = []
const r2 = []
for (let i = 0; i < this.length; i++) {
r1.push(transform1(this[i], i, this))
r2.push(transform2(this[i], i, this))
}
return [r1, r2]
}
Использование этой новой функции будет в лучшем случае неудобным:
const [tabs, panels] = myMap.call(this.state.pricepointsData, pricepoint => (...), pricepoint => (...))
...
<TabList>
{ tabs }
</TabList>
{ panels }
...
Таким образом, реальный вопрос должен быть: стоит ли эта абстракция?
И к этому у меня встречный вопрос:
Что больше, 2x1 или 1x2?
Вы можете использовать два цикла, каждый из которых выполняет одно действие (2 map
вызовов), или вы можете использовать один цикл, который выполняет два действия (вызов 1 myMap
).